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(),并根据指针实际指向AB还是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++更类似于通过分析您在街上找到的一些口香糖来学习如何烹饪。更喜欢一本合适的、同行评审的书。