抽象基类的抽象子类
Abstract subclass of abstract base 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;
};
做这件事最合适的方式是什么?
不同选项之间没有功能差异(因为您没有更改可访问性),但
- 我更喜欢选项一,因为它可以避免代码重复
- 选项3是最坏的可能性,因为尽管纯虚拟函数(由
=0
表示)显然是虚拟的,但它与Dog
中引入的其他(纯)虚拟函数的声明不太一致 -
如果,我只会恢复到选项2
Dog
是您分发给他人的库的一部分- 它本身引入了新的纯虚拟函数
Animal
本身不应该被"典型用户"直接进一步使用
通过这种方式,从
Dog
派生的客户端具有关于他必须在一个地方实现哪些功能的所有必要信息。
相关文章:
- 有没有办法按值将纯抽象类的所有子类传递给 C++ 中的函数?
- 如何将子类作为函数的参数传递给期望基类,然后将该对象传递到指向这些抽象类对象的指针向量中?
- 我们可以在没有新实例化的情况下声明一个抽象方法来返回抽象超类中的子类对象吗
- 如何将抽象类的可访问性限制为另一个抽象类及其子类?
- 如何从其抽象母类上的指针初始化子类?
- 使用抽象类的容器来保存子类
- 从子类中的抽象类调用方法
- 从子类到具有相同基数的抽象子类的隐式转换
- 尝试引用子类中的抽象对象时收到编译错误
- C++ == 运算符,用于使用 shared_ptr 的抽象基类的子级
- 抽象基类的抽象子类
- 在C++中初始化抽象基类的子类数组
- 在抽象类c的子类中使用来自抽象类的引用
- 防止在C++中对抽象类接口进行子类化
- 使用抽象类的子类专门化模板
- 我可以从子类以外的另一个类调用抽象基类的公共赋值运算符吗?
- 如何使用委托来抽象子类中调用基成员的方式
- 视觉 是否可以覆盖子类中的函数C++而无需对抽象的父类中的函数使用 virtual 关键字
- 如何将子类分配给函数中的抽象类指针
- 在超类中调用抽象方法,并在C++中的子类中实现它