口碑好的网站建设公司,仿克米设计网站,如何利用wordpress卖产品,珠海网站建设贵公司关于对象 ...引子:在C语言中,数据和处理数据的操作(函数)是分开来声明的,语言本身并没有支持数据和函数之间关联性,这种程序成为程序性的,由一组分布在各个一功能为向导的函数中的算法驱动,他们处理的是共同的外部…关于对象 ...引子:在C语言中,数据和处理数据的操作(函数)是分开来声明的,语言本身并没有支持数据和函数之间关联性,这种程序成为程序性的,由一组分布在各个一功能为向导的函数中的算法驱动,他们处理的是共同的外部数据....C在布局以及存取时间上的主要额外负担是有virtual引起的,包括: 1)virtual function 机制,用以实现一个有效率的执行期绑定 2)virtual base class 用以实现多次出现在继承体系中的 base class,有一个单一而被共享的实体1.对象模式:1.1对象模式:...C中,有两种class data members:static和nonstatic,以及三种class member functions:static,nonstatic和virtual,一共有三类C对象模型:简单对象模型,表格驱动对象模型,C物件对象模型. 1)简单对象模型:在此模型中一个object是由一系列的slots组成,每一个slot指向一个member,每个data member或是function member都有一个自己的slot 2)表格驱动模型:在此模型中,有两个指针,一个指向data member table,另一个指向member function table,在这项两个标志中存放着一系列slots,每一个slot指向一个data member或是一个function member. 3)C物件对象模型:在此模型中,nonstatic data members被配置于每一个class object之内,static data members则被存放在所有的class object之外,static和nonstatic functions也被存放在所有的class object之外,virtual functions则有以下两个步骤支持: a)每一个class产生出一堆指向virtual functions的指针,放在表格之中,这个表格被称为virtual table(vtbl). b)每一个class object被添加了一个指针,指向相关的virtual table,通常这个指针被称为vptr,vptr的设定和重置都有每一个class constructor,destructor和copy assignment运算符自动完成,每个vtbl的第一个slot一般都是指向type_info object....加上继承: C最初采用的继承模型并不运用任何间接行:base class subobject的data members直接被置于derived class object中,在C2.0以后才导入的virtual base class需要一些间接的base class表现方法.virtual base class的原始模型在class object之中为每一个关联的virtual base class 加上一个指针,其他演化出来的模型则导入一个virtual base class table或者扩充已存在的virtual table来维护virtual base class的位置.1.2关键词struct:...struct那个关键词,其实没什么用(Bell Lab)...C中凡是处于同一个access section的数据,必定保证以其声明次序出现在内存布局中,然而被放置在多个access sections中的数据,排列次序就不一定有规定的顺序....C struct在C中的一个合理用途是,当你要传递一个复杂的class object的全部或是部分到某个C函数中去时,struct的声明可以将数据封装起来,并保证拥有与C兼容的空间布局,然而这项保证只在组合(composition)的情况下才存在,如果是继承而不是组合在不行,因为编译器会决定是否要有额外的data members被安插到base struct subobject之中.1.3对象的差异:...C程序设计模型直接支持三种programming paradigms(程序设计典范): 1)程序模型:就像C一样. 2)抽象数据类型模型:该模型所谓的抽象是和一组表达式(public接口)一起提供,而其运算符定义仍然隐而未明. 3)面向对象模型:在此模型中有一些彼此相关的类型,通过一个抽象的base class(用以提供共通接口)被封装起来....C用下列方法来支持多态: 1)经由一组隐含的转化操作. 2)经由virtual function机制. 3)经由dynamic_cast和typeid运算符.注:一般只有通过pointers或是references的间接处理,才能支持面向对象程序设计所需的多态....要表现一个class object需要多少内存? 1)其nonstatic data members的总和大小. 2)加上任何由于alignmennt的需求而填补的空间.(alignment就是将数值调整到某数的倍数,一般32位计算机上通产alignment为4bytes) 3)加上为了支持virtual而由内部产生的任何额外负担....指针类型:指向不同类型的个指针在内存上均是一个地址,无任何差异,其不同之处在于其所寻址出来的objec类型不同,也就是说,指针类型会教导编译器如何解释摸个特定地址中的内存内容以及其大小....关于多态: 当一个base clas直接被初始化为一个derived class object时,derived object就会被切割(sliced),以塞入较小的base type内存中,于是derived将没有留下任何痕迹,多态将不再出现.C通过pointer或是reference来支持多态,这种程序设计风格成为面向对象.转载于:https://www.cnblogs.com/suiyu/archive/2012/04/23/2466463.html