我想知道以下两个代码的确切区别。我很清楚,如果我正在创建派生类的对象,那么这两个程序都会抛出错误。发生这种情况是因为基类的构造函数是私有(private)的。
我正在使用以下版本的 gcc gcc 版本 4.8.3 20140627 [gcc-4_8-branch 修订版 212064] (SUSE Linux)
请告诉我为什么第一个程序在编译时没有显示任何错误。但是第二个显示编译错误。
No error
****************************************
class Base
{
private:
Base()
{
cout << "Base constructor" << endl;
}
};
class Derived:public Base
{
};
int main()
{
return 0;
}
Throwing Error at compilation time
*****************************************
class Base
{
private:
Base()
{
cout << "Base constructor" << endl;
}
};
class Derived:public Base
{
public:
Derived()
{
}
};
int main()
{
return 0;
}
最佳答案
编译器为第一个Derived
隐式声明的默认构造函数被定义为删除;如果您尝试使用该构造函数,则会发生编译错误。在第二个 Derived
中显式声明的构造函数试图调用私有(private)基类构造函数,因此定义本身是错误的。
关于c++ - 在继承的情况下,编译器创建默认构造函数和用户创建默认构造函数之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49314466/