【发布时间】:2017-10-26 00:00:05
【问题描述】:
是否有必要始终为您的基类提供构造函数?例如,如果我有以下基类,然后是一些派生类。
class Animal
{
public:
//Is this constructor necessary?
Animal();
virtual ~Animal();
};
class Zebra: public Animal
{
public:
Zebra();
~Zebra();
};
class Elephant: public Animal
{
public:
Elephant();
~Elephant();
};
假设我正在创建 Animal 指针,然后动态分配新的 Zebra 和 Elephant 对象。如果我从不打算创建 Animal 对象,那么是否有任何实际需要显式创建 Animal 构造函数?
【问题讨论】:
-
If I never intend to create an Animal object严格地说,每当您创建 Zebra 或 Elephant 对象时,您确实创建 Animal 对象。 -
在这种特定情况下,不需要用户指定的构造函数,编译器会为您生成默认构造函数。在某些情况下,根据 C++ 语言级别和类的细节,将需要构造函数。如果省略一个,则不会导致编译错误,但无法构造类。
-
@tkausl 所以在创建 Zebra 或 Elephant 对象时会调用基类构造函数,因为它们在技术上是 Animal 对象?
-
@SamVarshavchik 谢谢山姆的回答。虽然编译不是必需的,但显式定义基类构造函数是否被认为是最佳实践?
-
“最佳实践”的好处在于每个人都有不同的做法。
标签: c++ inheritance