如果派生类没有构造函数,基类构造函数是否会被执行?

时间:2013-11-09 09:30:21

标签: c++

这是一个我不确定的基本概念,我需要更清楚地了解。 我的问题是,即使派生类没有构造函数,基类构造函数是否也会被执行?或者基础构造函数调用与派生构造函数无关? 谢谢你的解释!

7 个答案:

答案 0 :(得分:0)

始终为每个基类执行构造函数。这包括编译器生成的默认构造函数。如果无法调用基类构造函数,则始终会收到错误消息。

答案 1 :(得分:0)

是的,默认情况下,执行基类的默认构造函数。

请注意,这适用于所有派生类构造函数 - 它们都调用默认构造函数,除非您指定另一个构造函数。这意味着派生类(用户定义或生成的编译器)中的复制构造函数默认情况下将调用默认的基类构造函数。

答案 2 :(得分:0)

一般来说,基类的构造函数将在派生类的构造函数之前被调用。

这是一个很好的SO线程解释它:Does a base class's constructor and destructor get called with the derived ones?

答案 3 :(得分:0)

是的,即使您的派生类没有构造函数

,基类构造函数也会被执行

答案 4 :(得分:0)

是。如果没有定义,编译器会为你召唤一个并使用

答案 5 :(得分:0)

即使您没有自己定义构造函数,编译器也会添加默认构造函数。

默认情况下,派生类构造函数将在执行派生类构造函数的主体之前调用基类的默认构造函数。

如果需要,可以在派生类的构造函数的初始化列表中调用基类的构造函数。

这是一个例子。

class Base
{
public:
    Base(int nValue)
    {
        //body of the constructor
    }
};

class Derived: public Base
{
public:

    Derived(int mnValue) :Base(mnValue)
    {
        //body of the constructor
    }
};

在上面的示例中,派生类在派生类的构造函数的初始化列表中显式调用Base类的构造函数。

有关详细信息,请参阅

http://www.learncpp.com/cpp-tutorial/113-order-of-construction-of-derived-classes/

http://www.learncpp.com/cpp-tutorial/114-constructors-and-initialization-of-derived-classes/

答案 6 :(得分:0)

每当你创建一个对象时,它的构造函数就会运行。每当你销毁一个对象时,它的析构函数就会运行。无论对象是成员,基础还是其他任何东西。这是面向对象编程的基础。