您的位置:首页 > 编程语言 > C语言/C++

继承中的构造函数调用顺序

2014-04-15 10:50 211 查看
调用派生类的构造函数之前先调用基类的构造函数,析构函数则相反。因为派生类需要用到基类的成员,所以必须先有基类,再有派生类。

C++语法规定:

如果类没有显示定义构造函数,则编译器提供一个默认构造函数(不带参数,仅创建对象,不初始化)。

如果类显示定义了构造函数,编译器一律不提供默认构造函数。即如果一个类定义了一个带参数的构造函数,还想要无参数的构造函数,则必须自己定义。

例如:

class Animal

{

public:

Animal(int height,int weight)
{
}

};

class Fish : public Animal

{

public:

     Fish()

     {

     }

};

编译出错:error C2512: 'Animal' : no appropriate default constructor available

调用Fish的构造函数时先调用无参的基类构造函数,而这里没有,故实例化失败。

在不给基类添加无参的构造函数的前提下,要想编译通过,需要如下定义派生类:

class Fish : public Animal

{

public:

Fish():Animal(300,400) // 添加一个初始化列表
{
}

};

这样可以成功构造Animal对象,便能够成功够构造Fish。
另外还有一种解决办法,就是给Animal构造函数提供默认参数,为所有形参提供默认实参的构造函数就是一个默认构造函数。

必须在构造函数初始化列表中进行初始化的类型(P388):

没有默认构造函数的类类型成员。
const或引用类型(这两种类型的对象可以初始化但不能对它们赋值)。

另一篇文章“继承与构造函数”用一个例子说明了类对象的初始化过程。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ 构造函数