(一)类的编译顺序,构造顺序,析构顺序
类的编译顺序:类名->成员名->成员方法体
类的构造顺序:成员对象->类对象
子类构造顺序:父类->子类
子类析构顺序:子类->父类
(二)重载,隐藏,覆盖
重载:函数名相同 参数列表不同 作用域要相同
隐藏:子类隐藏父类中同名的成员方法
覆盖:子类覆盖父类中相同的虚成员方法 (相同表示 同名 同返回值 同参数列表)
(三)四种类型强转
(1)const_cast:去掉const属性的类型强转
如:const int a = 1; int b = const_cast<int>(a); //去掉a修饰的const
(2)static_cast:编译器认为安全的
如:int a; double b = static_cast<double>(a);
(3)dynamic_cast:运行时期的类型强转,依靠RTTI(重要)
1.必须是指针
2.必须是继承关系的类型指针
3.有RTTI(存在于虚表里,运行时的类型),即有虚表
(4)reinpreter_cast:强制转换 (int)a
(四)虚表什么时候产生?存放在哪里?
答:存放在.rodata段,数据段编译期生成
(五)静多态,动多态 静多态:编译时期决定的多态 如:重载(编译期调用),模板
动多态:运行时期的多态,运行时才知道调用哪个成员方法。如