您的位置:首页 > 其它

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

2016-04-10 20:55 169 查看
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在看看汇编

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息