为什么抽象类可以没有抽象方法?

为什么抽象类可以没有抽象方法?

抽象类为何没有抽象方法?

尽管有说法称没有抽象方法的抽象类是没有意义的,但在实际项目开发中,我们仍然时常可以看到定义为抽象类但不包含任何抽象方法的基类。为什么会出现这种看似矛盾的情况呢?

指针类型安全

主要原因在于指针类型安全。在 c++++ 中,指针指向的类型必须与声明指针时指定的类型一致。考虑以下示例:

class base {};  class derived : public base {};  base* baseptr = new derived();
登录后复制

由于 derived 继承自 base,因此 derived* 指针也可以安全地转换为 base* 指针。但是,如果 base 是一个抽象类(但没有抽象方法),则情况就不一样了:

class Base { virtual void dummy() {} }; // 注意:`dummy()` 是一个纯虚函数,但没有定义实现  class Derived : public Base {};  Base* basePtr = new Derived();
登录后复制

在这种情况下,baseptr 指向的是一个 derived 对象,但它只能调用 base 中的成员函数。如果尝试调用 derived 中定义的成员函数,则会导致未定义行为。

因此,通过将基类定义为抽象类(即使没有抽象方法),可以防止对子类对象进行不安全的指针操作。它确保了所有指向基类对象的指针都只能访问基类中定义的成员,避免了潜在的运行时错误。

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容