关于一个指针和继承的有关问题,小弟我想问问大家,为什么输出的是这样的
关于一个指针和继承的问题,我想问问大家,为什么输出的是这样的?
先上代码吧!
以上代码的输出结果是:
A::print()
B::print()
C::print()
A::print()
B::print()
C::print()
A::print()
A::print()
A::print()
前六个我还能明白,可是为什么接下来三个全输出A::print()呢,有知道的帮忙解答一下吧,不胜感激。
------解决方案--------------------
由于对象的静态类型与动态类型一样,所以通过对象无法体现出多态的特性,只有指针和引用才能体现。
------解决方案--------------------
就是C++中的多态是通过指针和引用来实现的,你的全局函数print的参数是一个对象,不能动态调用各类中的成员函数
------解决方案--------------------
C++中的多态是基于指针/引用的。
先上代码吧!
- 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++中的多态是基于指针/引用的。