我有一个来自抽象类的派生派生类。代码如下。我有一个FishTank类来自水族馆,水族馆来自项目。我的问题是我应该把virtual int minWidth()定义为const = 0;再次在水族馆或下面的代码是否足够?
class Item{
public:
virtual int minWidth() const = 0;
};
class Aquarium: public Item{
public:
virtual int calWidth() = 0; // Pure virtual function.
};
class FishTank : public Aquarium{
public:
FishTank(int base1, int base2, int height);
~FishTank();
int calWidth();
int minWidth();
};
答案 0 :(得分:6)
没有理由再这样做。它只会浪费空间,让你有机会从拼写错误中获得编译错误。 :)一旦你继承了,就像它曾经在那里一样。
但是,你实际上并没有实现它!为什么?您在const
中遗漏了FishTank
:
int minWidth() const; // <-- const!
答案 1 :(得分:1)
您无需重新声明minWidth
;纯虚函数将继承自Item
。
答案 2 :(得分:1)
您的意思是“定义”还是仅仅是“声明”?如果一个合适的默认定义可能适用于所有水族馆,那么无论如何都要在Aquarium类中定义它,但你可能不想让它成为纯虚拟,否则所有派生类仍然必须覆盖它,即使他们只是想要调用基类实现。
否则,重新声明就没有意义了。无论哪种方式,派生的具体类仍然必须覆盖该函数,并且当通过指针或对Item或Aquarium的引用调用时,该函数的行为没有区别。