基于对象即对应了面向对象三大特征中的“封装”,可以简单概括为:
将一组关联的数据和一组对应的操作绑定在一起
优点:
设计目标:
设计过程:
选择合适的数据类型 和 可读性好的变量名
为成员变量设置合适的访问权限
还需要考虑以下两点:
使用成员初始化列表
类的成员变量是否存在指针
先实现相应的成员方法
再考虑是否需要实现自定义的运算符重载函数
考虑是否要给成员方法添加修饰符:
面向对象设计的主要目标是为了实现多态,实现代码的动态绑定,提高可维护性。
多态:
静态(编译时期)的多态:函数重载,函数名和返回值相同,参数列表不同
动态(运行时期)的多态:基类指正指向派生类对象,通过该指针调用同名覆盖方法,通过动态绑定来实现
多态的目的:
多态实现:
一个类定义了虚函数,编译阶段编译器为该类产生一个唯一的vftable虚函数表,虚函数表
存储了RTTI指针和虚函数的信息,当程序运行时,每张虚函数表会加载到内存中的.rodata区
虚函数表
一个类中定义了虚函数,类的对象在运行时,内存开始部分,多存储一个vfptr虚函数指针,
指向相应类型的虚函数表vftable
虚函数的数量,不影响对象内存大小(vfptr),影响的是虚函数表的大小
如果派生类中,与基类中的虚函数,返回值,函数名,参数列表都相同,自动处理为虚函数
动态绑定的汇编:
mov eax, dword ptr[pb]
mov ecx, dword ptr[eax]
call ecx
设计步骤:
考虑成员变量
考虑多态接口的设计
考虑继承方式
-是否存在多重继承,以及可能由于多重继承而出现菱形继承的问题,如果存在,需要使用虚继承
重写虚函数的方法,来实现多态