我在单个cpp文件中有以下代码:
class Base
{
public:
//constructor
Base() = delete;
};
class Derived : public Base
{
public:
//copy constructor
Derived( const Derived & other ){};
};
int main( int argc, char* argv[] )
{
//empty
}
但是,编译cpp文件会导致错误
我不明白为什么。为派生类定义复制构造函数时,基类的默认构造函数如何发挥作用?
最佳答案
构造派生类的对象必须构造其基类的对象(因为派生实例是基实例+扩展)。
因此,初始化派生实例必须初始化基本实例。问题是,当我为派生类调用ctor时,将调用基类的ctor吗?当您将派生的ctor定义为:
Derived( const Derived & other ){};
编译器发现您没有指定对特定基类ctor的调用,然后编译器生成了不带参数的对ctor的调用。但是,a,您从基类中将其删除。然后发出一个错误。
您可能认为为派生类调用复制ctor会生成对未删除的基类的复制ctor的调用。但是,a,不,规则是,如果您不为基类指定特定的ctor调用,则会调用不带参数的ctor。
关于c++ - 为什么为派生类定义拷贝构造函数要求定义基类的默认构造函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59608913/