抽象基类的抽象子类

时间:2015-04-03 20:25:15

标签: c++ abstract-class

我有一个抽象的基类。假设,我希望派生类也是抽象的,并将纯虚函数的实现责任留给更低级的类。这样做的最佳方式是什么?

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

最合适的方式是什么?

1 个答案:

答案 0 :(得分:2)

不同选项之间没有功能差异(因为您不会更改辅助功能),但

  • 我更喜欢选项一,因为它避免了代码重复。
  • 选项3是最糟糕的可能性,因为 - 虽然很明显纯虚函数(由=0表示)是虚拟的 - 但它与{中引入的其他(纯)虚函数的声明不太一致。 {1}}。
  • 我只会在

    时恢复到选项2
    • Dog是您分发给其他人的图书馆的一部分
    • 它引入了新的纯虚函数。
    • Dog本身不应被"典型用户"进一步使用。直接

    这样,从Animal派生的客户端拥有关于他必须在一个地方实施哪些功能的所有必要信息。