假设有类 A 和继承 A 的类 B。使用 B 对象的正确方法是什么?我在“cplusplus.com”中看到他们以这种方式“使用”B 对象:
B b;
A* a=&b;
使用类“A”指针和使用 b 有什么区别?
谢谢!
假设有类 A 和继承 A 的类 B。使用 B 对象的正确方法是什么?我在“cplusplus.com”中看到他们以这种方式“使用”B 对象:
B b;
A* a=&b;
使用类“A”指针和使用 b 有什么区别?
谢谢!
他们这样做只是为了表明您可以,并且在您这样做时会调用多态性。
如果你只想使用你的B b
,就使用它;不需要A*
。
顺便说一句,从互联网教程中学习 C++ 类似于通过分析你在街上找到的一些口香糖来学习如何烹饪。更喜欢一本合适的、经过同行评议的书。
当您拥有虚函数时,使用指向基类的指针的优势就来了。想象以下
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 A
、 aB
还是 a来调用正确的函数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*
. 这种类型的多态性对于将功能或精神相似但实现不同的事物分组很有用。