抽象类为何没有抽象方法?
尽管有说法称没有抽象方法的抽象类是没有意义的,但在实际项目开发中,我们仍然时常可以看到定义为抽象类但不包含任何抽象方法的基类。为什么会出现这种看似矛盾的情况呢?
指针类型安全
主要原因在于指针类型安全。在 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 中定义的成员函数,则会导致未定义行为。
因此,通过将基类定义为抽象类(即使没有抽象方法),可以防止对子类对象进行不安全的指针操作。它确保了所有指向基类对象的指针都只能访问基类中定义的成员,避免了潜在的运行时错误。
以上就是为什么抽象类可以没有抽象方法?的详细内容,更多请关注php中文网其它相关文章!