什么时候编译器会合成派生类的构造函数

1.派生类继承的基类中缺省的构造函数时

源代码:

#include <iostream>

using namespace std;

class Base

{

public:

Base()

{ }

void  FunTest()

{  }

int m_a;

};

class Der : public Base

{

public:

void  FunTest1()

{ }

};

void Test()

{

cout << "********" << endl;

Der  d;

}

int main()

{

Test();

getchar();

return 0;

}

看看汇编

如果去掉基类中

Base()

{  }

在看看汇编

2.派生类虚拟继承基类时

代码:

#include <iostream>

using namespace std;

class Base

{

public:

void  FunTest()

{  }

int m_a;

};

class Der : virtual public Base

{

public:

void  FunTest1()

{ }

};

void Test()

{

cout << "********" << endl;

Der  d;

}

int main()

{

Test();

getchar();

return 0;

}

看看汇编

如果去掉继承列表中的virtual

在看看汇编

3.派生类中有其他类类型的成员(该类有缺省的构造函数)时

代码:

#include <iostream>

using namespace std;

class Base

{

public:

void  FunTest()

{  }

int m_a;

};

class T

{

public:

T()

{  }

void  FunTest()

{  }

int m_a;

};

class Der :public Base

{

public:

void  FunTest1()

{ }

T test;

};

void Test()

{

cout << "********" << endl;

Der  d;

}

int main()

{

Test();

getchar();

return 0;

}

看看汇编

如果去掉T类中

T()

{  }

在看看汇编

4.派生类或基类中有虚函数的出现时

代码:

#include <iostream>

using namespace std;

class Base

{

public:

virtual void  FunTest()

{  }

int m_a;

};

class Der :public Base

{

public:

void  FunTest1()

{ }

};

void Test()

{

cout << "********" << endl;

Der  d;

}

int main()

{

Test();

getchar();

return 0;

}

看看汇编

如果去掉Base类函数FunTest()前的virtual

在看看汇编

时间: 2024-10-11 21:09:53

什么时候编译器会合成派生类的构造函数的相关文章

C++构造函数 &amp; 拷贝构造函数 &amp; 派生类的构造函数 &amp; 虚继承的构造函数

构造函数 ,是一种特殊的方法 .主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中 .特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载.(摘自百度百科构造函数). 一.最基本的构造函数 1 class Base 2 { 3 public: 4 Base(int var) : m_Var(var) 5 { 6 } 7 private: 8 int m_Var; 9 }; 以上构造函数的执行过程:

c++学习笔记5,多重继承中派生类的构造函数与析构函数的调用顺序(二)

现在来测试一下在多重继承,虚继承,MI继承中虚继承中构造函数的调用情况. 先来测试一些普通的多重继承.其实这个是显而易见的. 测试代码: //测试多重继承中派生类的构造函数的调用顺序何时调用 //Fedora20 gcc version=4.8.2 #include <iostream> using namespace std; class base { public: base() { cout<<"base created!"<<endl; }

C++:派生类的构造函数和析构函数的调用顺序

一.派生类 在C++编程中,我们在编写一个基类的派生类时,大致可以分为四步: ? 吸收基类的成员:不论是数据成员还是函数成员,派生类吸收除基类的构造函数和析构函数之外的全部成员. ? 改造基类函数:在派生类中声明一个或多个与其(某个)基类中的成员函数同名的成员函数,并将它(们)根据新的需求进行重写 ? 发展新的成员:在派生类中添加新的成员变量和成员函数,其中新添加的成员要求必须和基类中的成员不同名,并且应当保证新添加的成员会使派生类在功能上相比其基类有所发展 ? 重写派生类的构造函数和析构函数

对C++中派生类的构造函数和析构函数的认识

一:构造函数 形式:派生类名::派生类名:基类名1(参数1),基类名2(参数2),--基类名n(参数n),数据成员1(参数1),数据成员2(参数2),--数据成员n(参数n){ 各种操作的说明 } 执行过程:先执行基类的构造函数,再进行数据成员的赋值,最后执行函数体. 其中基类名和数据成员的顺序是由在派生类的定义中声明的顺序决定执行的顺序的,因此它们的顺序是任意的,但为了可读性,还是最好按顺序写. 如果基类只有默认构造函数,则基类名和参数表可以不用写出来. 二:复制构造函数 派生类的构造函数的形

C++:派生类的构造函数和析构函数

4.2 派生类的构造函数和析构函数4.2.1 派生类构造函数和析构函数的执行顺序 通常情况下,当创建派生类对象时,首先执行基类的构造函数,随后再执行派生类的构造函数:当撤销派生类对象时,则先执行派生类的派生类的析构函数,随后再执行基类的析构函数. //例4.5 派生类的构造函数和析构函的执行顺序 #include<iostream> using namespace std; class Base{ //声明基类Base public: Base() { cout<<"Co

c++学习笔记4,派生类的构造函数与析构函数的调用顺序(一)

測试源代码: //測试派生类的构造函数的调用顺序何时调用 //Fedora20 gcc version=4.8.2 #include <iostream> using namespace std; class base { public: base() { cout<<"base created!"<<endl; } ~base() { cout<<"base destroyed!"<<endl; } };

【C++学习之路】派生类的构造函数(一)

一.简单派生类的构造函数: 1.所谓简单派生类,就是指派生类中不包含基类的内嵌对象的派生类. 2.一般来说,这样的派生类的构造函数的形式是: student( int i, string nam, int sid) : person( i, nam) { stuid = sid; } person(是基类的初始化列表) 3.构造函数的初始化列表的使用 3.1所有的构造函数都可以拿参数的初始化表来构造完全属于自己的数据成员,比如: 1 #include <iostream> 2 using na

sdut 5-2 派生类的构造函数

5-2 派生类的构造函数 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 通过本题目的练习可以掌握派生类构造函数的定义和使用方法. 要求定义一个基类Person,它有3个protected的数据成员:姓名name(char *类型).性别 sex(char类型).年龄age(int类型):一个构造函数用于对数据成员初始化:有一个成员函数show()用于输出数据成员的信息. 创建Person类的公有派生类Employee,增加两

派生类的构造函数

派生类对象包含基类对象 执行派生类构造函数之前,先执行基类的构造函数 派生类交代基类初始化,具体形式: 构造函数名(形参表):基类名(基类构造函数实参表) { } 析构函数先调用派生类的构造函数,再调用基类的析构函数. 创建派生类的对象时,执行派生类的构造函数之前: 调用基类的构造函数------初始化派生类对象中从基类继承的成员 调用成员对象类的构造函数------初始化派生类对象中的成员对象 执行完派生类的析构函数后: 调用成员对象类的析构函数 调用基类的析构函数 析构函数的调用顺序和构造函