继承中的构造和析构 继承和组合混搭情况下,构造函数、析构函数调用顺序研究

来源:互联网 发布:垃圾食品税收 知乎 编辑:程序博客网 时间:2024/06/01 10:46




//继承中的构造和析构 //继承和组合混搭情况下,构造函数、析构函数调用顺序研究#include <iostream>using namespace std;class Object //爷爷{public:Object(const char* s)//爷爷的构造函数{cout << "Object()" << " " << s << endl;}~Object()//爷爷的析构函数{cout << "~Object()" << endl;}};class Parent : public Object //父亲{public:Parent(const char* s) : Object(s)//继承爷爷,在调用父亲构造函数时,应该先调用{cout << "Parent()" << " " << s << endl;}~Parent(){cout << "~Parent()" << endl;}};class Child : public Parent//儿子{protected:Object o1;Object o2;public:Child() : o2("o2"), o1("o1"), Parent("Parameter from Child!"){cout << "Child()" << endl;}~Child(){cout << "~Child()" << endl;}};void run05(){Child child;}int main(int argc, char *argv[]){cout << "demo05_extend_construct_destory.cpp" << endl;run05();system("pause");return 0;}
接下来我来分析此代码

开始child对象创建将调用child构造函数,因为child继承了parent,所以在调用child之前先调用parent构造函数,又因为parent继承Object,所以在调用Parentt函数之前先调Object构造函数,调用完object函数,然后调用Parent函数,调用了Parent函数,好,这里因为在child类中的成员是两个object对象,因此调用完Parent类后,然后应该调用2个object对象的构造函数(注意这个和第一次调用不一样),最后再调用child构造函数

析构的顺序与构造顺序相反

先child析构,然后child中的成员析构,再parent析构最后Object(爷爷析构)









综合演练2

//继承中的构造和析构 //继承和组合混搭情况下,构造函数、析构函数调用顺序研究#include <iostream>using namespace std;class Object{public:Object(const char* s)//爷爷{cout << "Object()" << " " << s << endl;}~Object(){cout << "~Object()" << endl;}};class Parent : public Object{public:Parent(const char* s) : Object(s)     //爸爸{cout << "Parent()" << " " << s << endl;}~Parent(){cout << "~Parent()" << endl;}};class Child : public Parent//儿子{protected:Object o1;Object o2;public:Child() : o2("o2"), o1("o1"), Parent("Parameter from Child!"){cout << "Child()" << endl;}~Child(){cout << "~Child()" << endl;}};void run05(){Child child;}int main(int argc, char *argv[]){cout << "demo05_extend_construct_destory.cpp" << endl;run05();system("pause");return 0;}

//此例子与上面例子一样,自己可以试着分析


通过这2个例子的讲解,大家应该对继承中析构与构造混搭有了一个了解了吧





0 0