2015-04-03 151 views
0

我有一个抽象基类。假设我希望派生类也是抽象的,并将纯虚函数的实现职责留给更低的类。做这件事的最好方法是什么?抽象基类的抽象子类

class Animal { 
public: 
    virtual void makeNoise() = 0; 
}; 

class Dog : public Animal { 
}; 

是更好地留空这个样子,或者我应该做的:

class Dog : public Animal { 
public: 
    virtual void makeNoise() = 0; 

}; 

或者怎么样忽略了虚拟关键字:

class Dog : public Animal { 
public: 
    void makeNoise() = 0; 
}; 

什么是最合适的这样做的方法?

+0

“狗”类应该是抽象类吗? – 2015-04-03 20:28:12

+0

@JoachimPileborg:是的。 – 2015-04-03 20:29:28

+0

有人说过耦合吗? – 2015-04-03 20:30:44

回答

2

有不同的选择之间没有功能上的差异(如你不改变无障碍),但

  • 我宁愿选择一个,因为它避免了重复代码。
  • 选项3是最糟糕的可能性,因为 - 尽管显而易见的是纯虚函数(由=0表示)是虚拟的 - 它与在Dog中引入的其他(纯)虚函数的声明不太一致。
  • 如果

    • Dog是你发给其他人库
    • 它引入了新的纯虚函数本身的一部分,我只恢复选项2。
    • Animal本身是不应该被进一步使用的“典型用户”直接

    这样一来,从Dog派生具有哪些功能他在一个地方采取一切必要信息的客户。