程序员面试宝典笔记

淺唱寂寞╮ 提交于 2020-04-04 10:38:28

 

目录

第十一章 接口与继承

1、覆盖

 

第十一章 接口与继承

1、覆盖

1 A* pa = new A();  
2 pa->foo();        
3 B* pb = (B*)pa;   //此时pa仍然是指向A的类对象,因此pb也指向A的类对象
 1 #include <iostream>
 2 using namespace std;
 3 
 4 class A
 5 {
 6 public:
 7     void virtual foo()
 8     {
 9         cout << "A" << endl;
10     }
11 };
12 class B :public A
13 {
14 public:
15     void virtual foo()    //这里不加virtual也是可以的,只要基类中加派生类同名函数自动成为虚函数
16     {
17         cout << "B" << endl;
18     }
19 };
20 int main()
21 {
22     A* pa = new A();  //创建指向A类对象的指针pa
23     pa->foo();        //由于pa是基类指针,所以执行基类A中的函数foo()
24     B* pb = (B*)pa;   //将pa转换为B类型并创建B类型指针,最后将pa赋值给pb,但是pa仍然指向基类的类对象,所以pb也指向基类的类对象
25     pb->foo();        //执行基类A中的函数foo()
26     delete pa, pb;
27 
28     pa = new B();    //此时pa指向了派生类的类对象
29     pa->foo();       //执行派生类中的函数foo()
30     pb = (B*)pa;
31     pb->foo();       //执行派生类中的函数foo()
32 
33     system("pause");
34     return 0;
35 }
View Code

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!