基类的指针指向派生类的对象
2016-01-06 09:35
253 查看
说明:只要基类的成员函数是虚函数,派生类的同名函数(参数相同,返回值类型相同),函数体不同,不管有没有显式声明virtual都是虚函数。
派生类中virtual关键字可有可无,但是也是虚函数。
结论:
基类的指针指向派生类的对象,当调用同名的成员函数时:
1)如果在基类中成员函数为虚函数,那么基类指针调用的就是派生类的同名函数。virtual void display();
可以这么理解:因为该函数是虚的,所以会找真正实现的那个函数,所以调用派生类B中的 B class virtual display.
2)如果基类中成员函数为非虚函数,则调用的是基类的成员函数。void show();
因为基类是非虚的,已经完全实现了,所以没有必要再调用派生类的了,就调用基类的A class show()
派生类中virtual关键字可有可无,但是也是虚函数。
#include "stdafx.h" #include "iostream" using namespace std; class A { int x; public: A(int i) {x=i;} void show() { cout<<"A class show():x="<<x<<endl; } virtual void display() { cout<<"A class virtual display():x="<<x<<endl; } }; class B:public A { int y; public: B(int i,int j):A(i) { y=j;} void show() { cout<<"B class show(): y="<<y<<endl; } void display()//前面有无virtual都可以 { cout<<"B class virtual display():y="<<y<<endl; } }; int main(int argc, _TCHAR* argv[]) { A a(5),*pa; B b(10,20); pa=&b; pa->show(); pa->display(); system("pause"); return 0; }
结论:
基类的指针指向派生类的对象,当调用同名的成员函数时:
1)如果在基类中成员函数为虚函数,那么基类指针调用的就是派生类的同名函数。virtual void display();
可以这么理解:因为该函数是虚的,所以会找真正实现的那个函数,所以调用派生类B中的 B class virtual display.
2)如果基类中成员函数为非虚函数,则调用的是基类的成员函数。void show();
因为基类是非虚的,已经完全实现了,所以没有必要再调用派生类的了,就调用基类的A class show()
相关文章推荐
- Java中Filter、Servlet、Listener的学习
- 为UniDBEdit添加拖拽属性
- Python单例模式
- 资深屌丝,初级程序猿的第一篇博客
- 秒杀多线程第五篇 经典线程同步 关键段CS
- CSS有用的代码片段
- 第一组咖啡机器人界面设计一阶段进展
- 常用正则表达式大全
- ubuntu下删除桌面主文件夹
- python matplotlib安装权威指南
- UISwitch的默认宽高51*31,UITabBarController的默认高度是49
- 后缀数组应用——公共子串的个数
- mongo客户端mongoVUE使用说明
- 在可编辑表格EditorGrid中,我选择一行已输入的数据,点击删除按钮,该行数据将被删除,然后当我点击表单提交按钮时,已经被删除的那一行数据仍然被插入数据库中
- spring3.1.1入门讲解二(注解篇)
- Android 打开系统蓝牙设置
- COMODO网络安全专业版8下载
- 用jquery实现复选框主从选择
- 在用到iframe的前端页面调用c++的或者android方法时提示找不到方法问题解决
- Java和php中的try-catch分析