#include <iostream>
using namespace std;
/* 派生类和基类的赋值兼容性原则:
* 子类和父类的赋值兼容性原则:
* 1,子类对象可以当作父类对象使用
* 2,子类对象可以直接赋值对父类对象
* 3,子类对象可以直接初始化父类对象
* 4,父类指针可以直接指向子类对象
* 5,父类引用可以直接引用子类对象
*
* 总结:子类就是特殊的父类(base* p = &child;)
*/
class Object {
public:
Object(const char* s) {
cout << "Object 构造函数" << " " << s << endl;
}
~Object() {
cout << "Object 析构函数" << endl;
}
};
class Parent : public Object {
public:
Parent(const char* p):Object(p) {
cout << "父类的构造函数" << p << endl;
}
void printP() {
printf("我是父类函数printP()!\n");
}
~Parent() {
cout << "父类析构函数" << endl;
}
protected:
int a;
int b;
private:
};
class Child : public Parent {
public:
Child():o2("o2"), o1("o1"), Parent("Parent parameter from Child") {
a = 0; b = 0; c = 0;
cout << "子类的构造函数" << endl;
}
void printC() {
printf("我是子类函数printC()!\n");
}
~Child() {
cout << "子类析构函数" << endl;
}
protected:
Object o1;
Object o2;
private:
int c;
};
/*
* 继承中的构造和析构原则:
* 1,子类对象在创建时,会首先调用父类的构造函数
* 2,父类构造函数执行结束后,执行子类的构造函数
* 3,当父类的构造函数有参数时,需要在子类的初始化列表中显示调用
* 4,析构函数调用的先后顺序与构造函数相反
*
* 继承和组合混搭情况下,构造和析构调用原则:
* 1,先构造父类,再构造成员变量,最后构造自己。
* 2,先析构自己,在析构成员变量,最后析构父类。
*
* 先构造的对象,后释放。
*/
void playObj() {
//Parent p1("ddd");
// 没有基类哪有派生类
Child c1; // 子类先调用父类的构造函数,然后再调用子类自己的构造函数
}
void main() {
playObj();
system("pause");
}
C++继承和组合混搭构造和析构调用顺序研究
最新推荐文章于 2023-01-12 20:14:54 发布