如果一个类可能被继承,那么每个函数都应该是虚函数吗?

Jos*_*son 5 c++ oop

在C++中,编码器不知道其他编码器是否会继承他的类.他应该将该课程中的所有功能都虚拟化吗?有什么缺点吗?或者它根本不被接受?

tem*_*def 10

在C++中,只有在打算以多态方式使用它时,才应该使类可继承.在C++中处理多态对象的方式与处理其他对象的方式有很大不同.您不倾向于将多态类放在堆栈上,或者通过值传递它们或从函数返回它们,因为这会导致切片.多态对象倾向于堆分配,传递并通过指针或引用返回等.

如果您将类设计为不继承,然后从中继承,则会导致各种问题.如果析构函数未标记为虚拟,则无法通过基类指针删除该对象,而不会导致未定义的行为.如果virtual未标记成员函数,则无法在派生类中重写它们.

作为C++中的一般规则,在设计类时,请确定是否要继承它.如果这样做,请标记相应的函数virtual并为其提供virtual析构函数.您也可以禁用复制赋值运算符以避免切片.同样,如果您希望该类不可继承,请不要给它任何这些函数.在大多数情况下,从一个未设计为继承的类继承是一个逻辑错误,并且大多数时候你想要这样做,你通常可以使用组合而不是继承来实现这种效果.