【发布时间】:2011-03-31 11:15:39
【问题描述】:
我的问题很简单。我们什么时候需要有一个默认构造函数? 请参考以下代码:
class Shape
{
int k;
public:
Shape(int n) : k(n) {}
~Shape() {}
};
class Rect : public Shape
{
int l;
public:
Rect(int n): l(n)
{} //error C2512: 'Shape' : no appropriate default constructor available
~Rect() {}
};
为什么编译器没有在类 Rect 中隐式生成零参数默认构造函数?
据我所知,如果一个类(Rect)派生自另一个具有默认构造函数(隐式生成或显式提供)的类(Shape),则默认构造函数应该由编译器生成。
【问题讨论】:
-
构造 Rect 对象并使用它的部分在哪里?可能你创建它就像'Rect rec;'这需要一个默认的构造函数。
-
IIRC 如果您不指定构造函数,编译器将为您创建一个默认构造函数。但如果你指定一个,它只会有那个。
-
ctor == 构造函数...啊哈!
-
@poweroy:是的,你是对的;但我假设“Rect rec”将使用编译器提供的默认 ctor
-
@Tomalak:我想知道 wat ctor 的含义,并发现(通过谷歌搜索)它是构造函数的常见缩写。我不知道。
标签: c++ language-lawyer