C/C++教程

当前类没有默认构造函数,但成员对象有默认构造函数(整理自深度探索C++对象模型 的41页)

本文主要是介绍当前类没有默认构造函数,但成员对象有默认构造函数(整理自深度探索C++对象模型 的41页),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

当前类没有默认构造函数,但成员对象有默认构造函数

class Foo
{
    public:
Foo();//default constructor
Foo(int);
...
};

class Bar//自己没有默认构造函数,但其成员对象foo有默认构造函数.
{
    public:
Foo foo;//这个时候Bar::foo需要被初始化
private:
    int n;
};

//此时编译器会自动为Bar合成一个默认构造函数(不可见)
Bar::Bar()
{
    //伪代码,会调用Foo的默认构造函数
    foo.Foo::Foo();
}

//若用户自己给成员对象Bar::n进行初始化.则编译器会将默认构造函数扩张成 #1 那样.
Bar::Bar()
{
    n = 0;
}

//#1
Bar::Bar()
{
    //伪代码
    foo.Foo::Foo();
    n = 0;
}

推广开来,若Bar有多个有默认构造函数的成员对象,则编译器会自动在Bar的默认构造函数中调用成员对象的默认构造函数.调用顺序取决于成员对象声明的顺序.

class Demo
{
public:
Demo();
Demo(int);
...
};

class Bar
{
public:
Foo foo;
Demo demo;
//...
private:
int n;
}; 

//用户自己写如下默认ctor
Bar::Bar(): demo(10) //注意此处demo(10)是调用的它的构造函数
{
n = 0;
}

//编译器会做如下的扩张
Bar::Bar(): demo(10) //注意此处demo(10)是调用的它的构造函数
{
//伪代码 调用成员对象的构造函数
foo.Foo::Foo();
demo.Demo::Demo(10);

n = 0;
}
这篇关于当前类没有默认构造函数,但成员对象有默认构造函数(整理自深度探索C++对象模型 的41页)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!