目录:
本篇涉及内容:
- 继承中的构造和析构顺序
- 继承同名非静态成员的处理方式
- 继承同名静态成员的处理方式
继承中的构造和析构顺序:
class object {
public:
object() {
cout << "object构造函数" << endl;
}
~object() {
cout << "object析构函数" << endl;
}
};
class SuperClass {
public:
SuperClass() {
cout << "SuperClass构造函数" << endl;
}
~SuperClass() {
cout << "SuperClass析构函数" << endl;
}
object o1;
};
class SubClass : public SuperClass {
public:
SubClass() {
cout << "SubClass构造函数" << endl;
}
~SubClass() {
cout << "SubClass析构函数" << endl;
}
object o2;
};
void main() {
SubClass sub;
}
输出结果:
结论:
- 构造顺序:
- 先找到SubClass的构造函数,发现其有父类则跳转到SuperClass构造函数.
- 执行SuperClass构造函数前,先构造完其成员对象后再执行父类构造函数.
- 然后跳转到SubClass构造函数,先构造完SubClass成员对象,最后再执行SubClass构造函数.
即:父类中的成员对象压栈——父类压栈——子类中的成员对象压栈——子类压栈
- 析构顺序:
对照上述的压栈顺序进行的弹栈顺序即为析构顺序
继承同名非静态成员的处理方式:
结论:
- 当子类中的成员(变量、函数)与继承过来的父类(变量、函数)同名时,继承过来的所有同名数据会被当前子类的成员数据隐藏掉(包括父类中的所有重载函数都会被隐藏)
- 若想要访问到父类中的成员数据则需要加上父类的作用域
继承同名静态成员的处理方式:
这里处理方式跟上述相似,需要注意的点是:C++中静态成员通过类名来直接访问的格式是类名::静态方法
/类名::静态变量名