1. c++ struct 作用:
改变默认的属性,使默认的private成为public
不会改变内存结构的布局,使得内存布局起来像C一样。
2. c++中实现多态的方法
通过指针或者引用将子类指针转化为基类的指针
透过虚函数调用子类的函数
通过dynamic 或者 typeid 关键字对指针进行父类向子类的转换
3. c++中一个类的大小如何构成?
类中的非静态数据成员
内存对齐不跟的填补空间
支持多态所需要的指向函数表的指针的大小,以及为支持virtual基类所需要的指针的大小
4. 当编译器需要的时候,他才会创建一个default constructor。这个constructor只会按照编译器的需要进行构建, 不会理会程序员的需要。
带有base class default constructor 的子类,会在其构造函数中都调用父类的缺省构造函数,如果子类有明显的构造函数,子类不会生成缺省的构造函数。
带有虚函数的类的继承体系中,编译器会为每一个构造函数(包括缺省的构造函数)为vptr赋值,令其指向vtbl
虚拟继承同样存在虚拟指针赋值的问题。
带有default constructor member 的类在构造时 ,必须依次(声明次序)调用成员的default constructor
5. 拷贝构造函数发生在:
以其他值作为初值生成新的变量时 : X a = b
函数调用中参数传递时
函数返回中存在类的返回值时。
6. default 拷贝构造函数发生时:
如果类的member有explicit copy constructor 那么就会调用之, 否则bitwise copy
如果类有含有explicit copy constructor的父类时 那么就会调用之, 否则bitwise copy
如果类中virtual function,这样宝贝构造函数不是真正的位拷贝,其必须可以识别子类父类,构造函数表,往函数表中填充子项,然后设置正确的指针。