C++ 抽象基类的抽象子类

C++ 抽象基类的抽象子类,c++,abstract-class,C++,Abstract Class,我有一个抽象基类。假设,我希望派生类也是抽象的,并将实现纯虚函数的责任留给更低级的类。最好的方法是什么 class Animal { public: virtual void makeNoise() = 0; }; class Dog : public Animal { }; 还是像这样空白比较好,还是我应该这样做: class Dog : public Animal { public: virtual void makeNoise() = 0; }; 或者忽略virtu

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

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

class Dog : public Animal {
};
还是像这样空白比较好,还是我应该这样做:

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

};
或者忽略virtual关键字,然后:

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

最合适的方法是什么?

不同选项之间没有功能上的差异(因为您不更改可访问性),但是

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

class Dog : public Animal {
};
  • 我更喜欢选项一,因为它可以避免代码重复
  • 选项3是最坏的可能性,因为-虽然很明显纯虚拟函数(由
    =0
    表示)是虚拟的-但它与
    Dog
    中介绍的其他(纯)虚拟函数的声明不太一致
  • 只有在以下情况下,我才会回到选项2

    • Dog
      是您分发给其他人的库的一部分
    • 它本身引入了新的纯虚函数
    • Animal
      本身不应该被“典型用户”直接使用
    这样,从
    Dog
    派生的客户机就拥有了关于必须在一个地方实现哪些功能的所有必要信息


狗类是否也应该是抽象类?@JoachimPileborg:是的。有人说过耦合吗?你甚至不必在狗类中写这个;该方法将被继承,并将保持纯虚拟状态。@Fireho:这是我编写的case-1。谢谢你的意见。