C ++中的抽象类

时间:2010-04-15 00:51:24

标签: c++

我有一个来自抽象类的派生派生类。代码如下。我有一个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();
};

3 个答案:

答案 0 :(得分:6)

没有理由再这样做。它只会浪费空间,让你有机会从拼写错误中获得编译错误。 :)一旦你继承了,就像它曾经在那里一样。

但是,你实际上并没有实现它!为什么?您在const中遗漏了FishTank

int minWidth() const; // <-- const!

答案 1 :(得分:1)

您无需重新声明minWidth;纯虚函数将继承自Item

答案 2 :(得分:1)

您的意思是“定义”还是仅仅是“声明”?如果一个合适的默认定义可能适用于所有水族馆,那么无论如何都要在Aquarium类中定义它,但你可能不想让它成为纯虚拟,否则所有派生类仍然必须覆盖它,即使他们只是想要调用基类实现。

否则,重新声明就没有意义了。无论哪种方式,派生的具体类仍然必须覆盖该函数,并且当通过指针或对Item或Aquarium的引用调用时,该函数的行为没有区别。