首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >抽象基类的抽象子类

抽象基类的抽象子类
EN

Stack Overflow用户
提问于 2015-04-03 20:25:15
回答 1查看 802关注 0票数 1

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

代码语言:javascript
复制
class Animal {
public:
    virtual void makeNoise() = 0;
};

class Dog : public Animal {
};

像这样留白比较好,还是我应该这样做:

代码语言:javascript
复制
class Dog : public Animal {
public:
    virtual void makeNoise() = 0;

};

或者忽略虚拟关键字并:

代码语言:javascript
复制
class Dog : public Animal {
public:
    void makeNoise() = 0;
};

最合适的方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2015-04-03 22:18:12

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

  • 我更喜欢选项一,因为它避免了代码重复。
  • 选项3是最坏的可能性,因为尽管一个纯虚拟函数(由=0表示)显然是虚拟的,但它与在Dog中引入的其他(纯)虚拟函数的声明不太一致。
  • 只有在以下情况下,我才会回到备选方案2
代码语言:javascript
复制
- `Dog` is part of a library that you distribute to others 
- It introduces new pure virtual functions itself.
- `Animal` itself is not supposed to be further used by the "typical user" directly   

这样,从Dog派生出来的客户端就有关于他必须在一个地方实现哪些功能的所有必要信息。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29439199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档