rl8*_*l84 7 c++ oop polymorphism
在一些书中写道,声明或继承虚函数的类称为多态类.
B类没有任何虚函数,但通过多个is-a测试.
C类有一个虚函数但不继承.
class A {};
class B : public A {};
class C
{
public:
virtual void f () {}
};
Run Code Online (Sandbox Code Playgroud)
是B类还是C类多态?
2003: 10.3/1 明确表示:
声明或继承虚函数的类称为多态类.
你实际上是逐字逐句地说出来的,所以我真的不明白这个问题是什么.
C(及其后代,如果你添加任何)是多态的; A而B不是.
请注意,在更广泛的OOP意义上,您总是可以执行一些 "多态",因为C++始终允许您进行向上转换; 因此,所有继承的对象都可以被视为不同(但相关)的类型.
但是,术语"多态"在C++中的定义略有不同,它更多地与您是否可以向下转换有关.如果你不想像C++标准那样混淆,你可以称之为"动态多态".
class C是多态的,这意味着在 a 上使用dynamic_castor将执行运行时类型检查,并且通过or调用成员函数将使用虚拟分派。typeidC&C&C*
(当然,当编译器提前知道运行时类型时,例如当您刚刚创建对象时,as-if 规则允许编译器在某些情况下避免运行时分派。)
正如 @Bill 在评论中提到的,这不仅仅是一些书上所说的,它是C++ 标准中的多态类[class.virtual]的定义(第 10.3 节, ):
虚函数支持动态绑定和面向对象编程。 声明或继承虚函数的类称为多态类。
| 归档时间: |
|
| 查看次数: |
454 次 |
| 最近记录: |