Polymorphism c++
Polymorphism c++
本文关键字:c++ Polymorphism 更新时间:2023-10-16
在一些书中,声明或继承虚函数的类称为多态类。
B类没有任何虚函数,但通过了多个is-a测试。
类C有一个虚函数,但不继承。
class A {};
class B : public A {};
class C
{
public:
virtual void f () {}
};
B类还是C类是多态的?
2003: 10.3/1
状态,明确:
声明或继承虚函数的类称为多态类。
实际上你自己一字不差地说了,所以我真的不明白你的问题是什么。
C
(及其后代,如果你添加任何)是多态的;A
和B
不存在
请注意,在更广泛的OOP意义上,您总是可以执行一些"多态性",因为c++总是允许您向上转换;因此,所有继承的对象都可以被视为不同(但相关)的类型。
然而,术语"多态"在c++中的定义略有不同,它更多地与是否可以向下转换有关。如果您不想像c++标准那样混淆,您可以将其称为"动态多态性"。
根据标准,"声明或继承虚函数的类称为多态类。"
因为A
和B
都没有声明或继承虚函数,所以它们不是多态的。C
声明一个虚函数,所以它是多态的。
class C
是多态的,这意味着在C&
上使用dynamic_cast
或typeid
将执行运行时类型检查,并且通过C&
或C*
调用成员函数将使用虚拟调度。
(当然,as-if规则允许编译器在提前知道运行时类型的情况下避免运行时分派,例如当您刚刚创建对象时。)
正如@Bill在评论中提到的,这不仅仅是一些书所说的,这是多态类的定义,可以在c++标准中找到(第10.3节,[class.virtual]
):
虚函数支持动态绑定和面向对象编程。声明或继承虚函数的类称为多态类。
相关文章:
- C++结合静态和动态多态性来创建"Hyper Polymorphism"?
- "Static polymorphism with Qt signal/slot: What is wrong?"
- visual c++ static polymorphism (CRTP) 在评估"静态 constexpr&
- C++:STL 类型和自定义类型的优雅"polymorphism"?
- Polymorphism , c++
- visual About MFC C++ Polymorphism
- C++: Polymorphism
- 如何使运算符过载并且不使用"Curiously Recurring Template Pattern"和"Run Time polymorphism"
- 为什么'pure polymorphism'比使用 RTTI 更可取?
- C++ polymorphism
- "True Polymorphism"的例子?(最好使用哈斯克尔)
- Polymorphism c++
- Inheritance-free polymorphism
- 使用派生类型为基类型的模板化参数调用函数时"template polymorphism"?