今天看书时注意到C++在多继承时,基类的构造顺序是按照继承时给定顺序执行的,析构的顺序正好相反!而与它们初始化的顺序没有任何关系,下面随便写了一个Demo程序来验证C++在多继承时基类的构造顺序。
#include <iostream>
#include <cstdlib>
using namespace std;
class a
{
public:
a(){cout<<"a constructor!!"<<endl;}
~a(){cout<<"a deconstructor!!"<<endl;}
};
class b
{
public:
b(){cout<<"b constructor!!"<<endl;}
~b(){cout<<"b deconstructor!!"<<endl;}
};
class c
{
public:
c(){cout<<"c constructor!!"<<endl;}
~c(){cout<<"c deconstructor!!"<<endl;}
};
class d
{
public:
d(){cout<<"d constructor!!"<<endl;}
~d(){cout<<"d deconstructor!!"<<endl;}
};
class e
{
public:
e(){cout<<"e constructor!!"<<endl;}
~e(){cout<<"e deconstructor!!"<<endl;}
};
class f:public e,public b,public c,public d,public a
{
public:
f(){cout<<"f constructor!!"<<endl;}
~f(){cout<<"f deconstructor!!"<<endl;}
};
int main(int argc,char * args[])
{
f testObj;
system("pause");
return EXIT_SUCCESS;
}
类f分别继承自类e,类b,类c,类d和类a,在main函数中定义了一个testObj对象,这个对象的构造顺序是e->b->c->d->a,析构顺序正好相反。
程序运行结果如下图所示
- 大小: 22.7 KB
分享到:
相关推荐
而继承包含了虚拟继承和普通继承,在可见性上分为public、protected、private。可见性继承比较简单,而虚拟继承对学习c++的难度较大。 首先,虚拟继承与普通继承的区别有: 假设derived 继承自base类,那么...
构造函数的执行次序如下: ...1,调用基类构造函数,调用顺序按照他们的继承时声明的顺序。 2,调用内嵌成员对象的构造函数,调用顺序按照他们在类中声明的 顺序。 3,派生类的构造函数体中的内容。
C++构造函数按下列顺序被调用: (1)任何虚拟基类的构造函数按照它们被继承的顺序构造; (2)任何非虚拟基类的构造函数按照它们被继承的顺序构造; (3)任何成员对象的构造函数按照它们声明的顺序调用; (4...
按声明顺序调用基类和成员构造函数。 如果类派生自虚拟基类,则会将对象的虚拟基指针初始化。 如果类具有或继承了虚函数,则会将对象的虚函数指针初始化。虚函数指针指向类中的虚函数表,确保虚函数正确地调用绑定...
C++经典语法与应用,类的编写与应用,构造与析构函数,函数的重载,类的继承,函数覆盖,基类与派生类的构造函数、析构函数先后调用顺序,如何在派生类构造函数中向基类的构造函数传递参数,this成员变量,类型转换...
1:掌握单继承和多继承下派生类的定义方法,理解基类成员在...3:理解同名冲突的产生原因,会使用虚基类来解决第三类同名冲突问题,并理解引入虚基类后构造函数、析构函数的调用顺序。 4:理解赋值兼容的相关使用方法。
14.8.1构造函数调用次序 14.8.2虚函数在构造函数中的行为 14.9析构函数和虚拟析构函数 14.10小结 14.11练习 第15章 模板和包容器类 15.1包容器和循环子 15.2模板综述 15.2.1C方法 15.2.2Smalltalk方法 15.2.3模板...
在 C++ 中,对象指针不调用构造函数*p[4],这意味着对象指针不能直接调用构造函数。 十三、静态成员和常成员 12. 静态成员函数: 在 C++ 中,静态成员函数由于没有 this 指针,所以只能访问静态成员(静态变量和...
C++经典语法与应用,类的编写与应用,构造与析构函数,函数的重载,类的继承,函数覆盖,基类与派生类的构造函数、析构函数先后调用顺序,如何在派生类构造函数中向基类的构造函数传递参数,this成员变量,类型转换...
析构函数先后调用顺序,如何在派生类构造函数中向基类的构造函数传递参数,this成员变量,类型转换的内幕,虚拟函数与多态性, 引用和指针的变量的区别与共同处。VC工程的编译原理与过程,将工程中不同的类拆分...
4. 在多重继承下,当建立派生类对象时,系统首先调用各个基类的构造函数,调用顺序与定义派生类时指定的基类顺序一致。 多重继承范例: #include /* run this program using the console pauser or add your own ...
继承包括继承中的存取控制、构造、析构的调用顺序、私有继承、运算符重载与继承、upcasting等。 八、多态性与虚函数 多态性是C++语言中的一种机制,它允许一个对象在运行时确定其类型。多态性包括 早/晚绑定、虚...
但仅仅用建立对象的最远派生类的构造函数调用虚基类的构造函数,而该派生类的所有基类中列出的对虚基类的构造函数的调用在执行中被忽略,从而保证对虚基类子对象只初始化一次。 (7) 在一个成员初始化列表中同时出现...
C++经典语法与应用,类的编写与应用,构造与析构函数,函数的重载,类的继承,函数覆盖,基类与派生类的构造函数、析构函数先后调用顺序,如何在派生类构造函数中向基类的构造函数传递参数,this成员变量,类型转换...
11.10.1 温习调用构造函数实现的类型转换 11.10.2 通过构造函数将变量转换为一个对象的成员变量 11.10.3 通过operator关键字进行转换 11.11什么可以重载,什么不可以重载 第12章 继承 12.1 什么是继承和派生 12.1.1...
且构造函数和析构函数的调用顺序和单继承是一样的,先调用基类构造函数,再调用对象成员的构造函数,最后调用派生类的构造函数。那么处于同一层次的各个基类构造函数的调用顺序是取决于声明派生类时所指定的各个基类...