关于一个指针和继承的问题,我想问问大家,为什么输出的是这样的?先上代码吧!C/C++ code#includeiostreamu
关于一个指针和继承的问题,我想问问大家,为什么输出的是这样的?
先上代码吧!
- C/C++ code
#include<iostream>using namespace std;class A{ public:virtual void print(void) { cout<<"A::print()"<<endl; };};class B:public A{ public:virtual void print(void) { cout<<"B:print()"<<endl; };};class C:public A{ public:void print (void) { cout<<"C:print()"<<endl; };};void print(A a){ a.print();}int main(void){ A a,*pa,*pb,*pc; B b; C c; pa=&a; pb=&b; pc=&c; a.print(); b.print(); c.print(); pa->print(); pb->print(); pc->print(); print(a); print(b); print(c); return 0;}以上代码的输出结果是:
A::print()
B::print()
C::print()
A::print()
B::print()
C::print()
A::print()
A::print()
A::print()
前六个我还能明白,可是为什么接下来三个全输出A::print()呢,有知道的帮忙解答一下吧,不胜感激。
[解决办法]
由于对象的静态类型与动态类型一样,所以通过对象无法体现出多态的特性,只有指针和引用才能体现。
[解决办法]
就是C++中的多态是通过指针和引用来实现的,你的全局函数print的参数是一个对象,不能动态调用各类中的成员函数
[解决办法]
C++中的多态是基于指针/引用的。
