使用有优势吗?
struct Base
{
virtual void foobar();
};
struct Derived : public Base
{
virtual void foobar() override;
};
代替:
struct Base
{
void foobar();
};
struct Derived : public Base
{
void foobar();
};
何时不需要动态/运行时多态性?如果是这样,为什么?
谢谢。
答案 0 :(得分:3)
库/程序应仅支持有意义的内容,如果您不打算/要禁止类Derived
可以替代类型Base
的对象,则您完全不应该提供这种可能性。
使用class Derived : public Base
,您可以提供多态性,并且如果提供的话,它应该表现出预期的效果。为成员提供与基类中相同的名称,但不覆盖它,这显然是不希望的,并且这样做时您应该有充分的理由和很好的文档。
如果您不想提供多态性,则可以继承private
或撰写:
class B {
public:
int foo() { return 0; };
};
class D1 : private B {
public:
int foo() { return B::foo() + 1; };
};
class D2 {
public:
int foo() { return b.foo() + 1; };
private:
B b;
};
int main() {
// B *b = new D1; // Error cannot cast to private base class B
// B *b = new D2; // D2 is not a subclass of B
}