这是一个基本的概念,我并不确定,需要有更清晰的认识。我的问题是,即使派生类没有构造函数,基类构造函数也会被执行吗?还是基构造函数调用与派生构造函数无关?谢谢你的解释!
7 回答
构造函数总是为每个基类执行。这包括编译器生成的默认构造函数。如果无法调用基类构造函数,您将始终收到错误消息。
是的,默认情况下会执行基类的默认构造函数。
请注意,这适用于所有派生类构造函数——它们都调用默认构造函数,除非您指定不同的构造函数。这意味着派生类(用户定义或编译器生成)中的复制构造函数将默认调用默认的基类构造函数。
一般来说,基类的构造函数会在派生类的构造函数之前被调用。
这是一个很好的 SO 线程来解释它:基类的构造函数和析构函数是否与派生的一起调用?
是的,即使你的派生类没有构造函数,基类构造函数也会被执行
是的。如果未定义,编译器会为您提供一个并使用它
即使你自己不定义构造函数,编译器也会添加默认构造函数。
默认情况下,派生类构造函数会在派生类构造函数体执行之前调用基类的默认构造函数。
如果需要,可以在派生类的构造函数的初始化列表中调用基类的构造函数。
这是一个例子。
class Base
{
public:
Base(int nValue)
{
//body of the constructor
}
};
class Derived: public Base
{
public:
Derived(int mnValue) :Base(mnValue)
{
//body of the constructor
}
};
在上面的例子中,派生类在派生类的构造函数的初始化列表中显式调用了基类的构造函数。
欲了解更多信息,请参阅
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/
每当您创建一个对象时,它的构造函数就会运行。每当你销毁一个对象时,它的析构函数就会运行。不管对象是成员、基还是其他任何东西。这是面向对象编程的基础。