Polymorphism , c++
Polymorphism , c++
本文关键字:c++ Polymorphism 更新时间:2023-10-16
假设有类 A 和继承 A 的类 B。我在"cplusplus.com"中看到他们以这种方式"使用"B 对象:
B b;
A* a=&b;
使用类"A"指针和使用 b 有什么区别?
谢谢!
当您拥有虚函数时,使用指向基类的指针的优势就在于此。 想象一下以下情况
class A {
A(){}
virtual ~A(){} // note virtual destructor
virtual void func(){ cout << "A func" << endl; }
};
class B : public A {
B(){}
virtual ~B(){}
virtual void func(){ cout << "B func" << endl; }
};
class C : public A {
C(){}
virtual ~C(){}
virtual void func(){ cout << "C func" << endl; }
}
现在,如果我们有一个指向基类的指针,我们可以在其上调用func()
,并根据指针实际指向A
,B
还是C
来调用正确的函数。例:
A* p1 = new A;
A* p2 = new B;
A* p3 = new C;
p1->func();
p2->func();
p3->func();
将输出以下内容
A func
B func
C func
现在你可能会说为什么不分别使用三个不同的指针指向 A、B 和 C 类型,但是如果你想要一个指针数组怎么办?那么它们都需要是相同的类型,即 A*
.这种类型的多态性对于将功能或精神相似但实现不同的事物分组很有用。
他们这样做只是为了表明你可以,当你这样做时会调用多态性。
如果你只是想使用你的B b
,就使用它;不需要A*
。
顺便说一句,从互联网教程中学习C++更类似于通过分析您在街上找到的一些口香糖来学习如何烹饪。更喜欢一本合适的、同行评审的书。
相关文章:
- 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"?