【发布时间】:2017-09-21 08:14:50
【问题描述】:
据我所知,C++ 中的类和结构之间的主要区别(并且可能是唯一的区别)是,类的成员默认为私有,而结构的成员默认为公共。
但是,可能因为我之前是一名 C 开发人员,我仍然继续声明结构以仅保存“公共”字段,而且我几乎从不声明方法(初始化成员的构造函数除外)。
我还想利用结构的 C++ 继承。
我的问题是:
- 即使语言允许,继承结构是一种好习惯吗?
- 是否可以阻止结构声明一个虚拟方法,这将创建一个 vtable 并修改结构的大小?
谢谢
【问题讨论】:
-
@Caleth 只是有时。其他时候为虚拟会员支付开销是个坏主意。这一切都取决于。
-
@Caleth 有时。有时你只需要继承。并且没有虚拟析构函数。
-
C++ 中真的没有“结构”。您可能会问,继承使用
struct关键字定义的类是否有意义,但这是见仁见智的问题。 -
@Caleth 模板方法模式,CRTP,扩展异常类型,通过使用私有继承节省大量输入,以及需要“is-a”关系而我们不 想要动态分配...
-
@juanchopanza 吹毛求疵:扩展(标准)异常类型并不是排除虚拟的继承示例,因为
std::exception::~exception是虚拟的。
标签: c++ inheritance struct