标签:des cWeb style blog io ar color os sp
1 #include<iostream> 2 using namespace std; 3 class P 4 { 5 public: 6 P(){} 7 virtual ~P(){cout<<"调用了基类的析构函数!"<<endl;} 8 virtual void show() 9 { 10 cout<<"调用了P类的输出函数"<<endl; 11 } 12 }; 13 14 class Q:public P 15 { 16 public: 17 Q(){} 18 ~Q(){cout<<"调用了派生类的析构函数!"<<endl;} 19 void show() 20 { 21 cout<<"调用了Q类的输出函数"<<endl; 22 } 23 }; 24 void callshow(P *obj) 25 { 26 obj->show(); 27 } 28 void main(void) 29 { 30 P *s=new Q; 31 callshow(s); 32 delete s; 33 system("pause"); 34 }
去掉基类show()前面的virtual,运行结果:
加上基类show()前面的virtual,运行结果:
去掉基类析构函数前面的virtual,运行结果:
通过运行结果可以很明显的得出结论:
当没有定义为virtual时,用哪个类的指针(P *s)就调用哪个类的函数,当添加了virtual时,指向哪个类的
对象(new Q),就调用哪个类的函数。概念和用法简单,但是比较重要的技巧。
标签:des cWeb style blog io ar color os sp
原文地址:http://www.cnblogs.com/xiguapi/p/4153132.html