2010-04-15 89 views
0

我从抽象类派生派生类。代码如下。我有一个从水族馆和水族馆派生的FishTank类是从物品派生的。我的问题是,我应该把virtual int minWidth()的定义为const = 0;再次在水族馆或是下面的代码是否足够?C++中的抽象类

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(); 
}; 

回答

6

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

但是,你并没有实际执行它!为什么?你在FishTank失踪const

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

你并不需要重新申报minWidth;纯虚函数将从Item继承。

1

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

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