C++中的虚函数详解
2016-06-07 23:53
447 查看
#
**C++中虚函数的使用****
虚函数一般使用在C++的多态性(多态的共有继承相关)**
多态性:1.
可以在派生类中重新定义基类的方法
2.使用虚方法比如下面一个小代码:
比如,一个酒店的用户:分为普通人,和VIP用户。
普通人和vip用户都必须登记个人信息,都有consume的方法而普通用户没有折扣,而vip有折扣并且vip也有礼物送,普通用户没有
下面的就是code:
man.h
a1引用的是基类,b1引用的是派生类
当它们同时调用consume函数时,如果consume是虚函数,则,调用引用的对象的consume函数
故 a1调用基类的函数,b1调用派生类的函数
如果consume不是虚函数,则,都调用基类的consume函数
即a1和b1调用基类的consume函数!
**C++中虚函数的使用****
虚函数一般使用在C++的多态性(多态的共有继承相关)**
多态性:1.
可以在派生类中重新定义基类的方法
2.使用虚方法比如下面一个小代码:
比如,一个酒店的用户:分为普通人,和VIP用户。
普通人和vip用户都必须登记个人信息,都有consume的方法而普通用户没有折扣,而vip有折扣并且vip也有礼物送,普通用户没有
下面的就是code:
man.h
#include<string> #include<iostream> //必须要声明,否则string类型无法读出,哭了这 using namespace std; class averageman { private: string S_name; //姓名 int I_years; //年龄 bool sex; //性别,true代表男,false代表女 public: averageman(string S = "nullbody", int ye = 0, bool se = 0);//开始给形参赋初值 void print(); virtual void consume(); //消费为虚函数 virtual ~averageman() {} //虚析构函数 }; class vipman:public averageman { private: int discount; public: vipman(averageman &b, int dis); virtual void consume(); //虚函数 void present(); ~vipman() {} };man.cpp
#include "man.h" #include<iostream> using namespace std; averageman::averageman(string S, int ye, bool se) { S_name = S; I_years = ye; sex = se; } void averageman::print() { cout << "name:" << S_name << endl; cout << "years:" << I_years << endl; if (sex) cout << "sex:male" << endl; else cout << "sex:female" << endl; } void averageman::consume() { cout << "you are the ordinary customer,can't have a discount" << endl; } vipman::vipman(averageman &b, int dis) :averageman(b) { discount = dis; } void vipman::consume() { cout << "you are the vip customer,you can have a "<<discount<<"% discount"<<endl; }main.cpp
#include "man.h" #include <iostream> using namespace std; int main() { averageman A("Mary", 18, false); averageman B("Tom", 20, true); vipman C(B, 88); averageman *a1 = &A; averageman *b1 = &C; a1->print(); b1->print(); a1->consume(); b1->consume(); //你会注意到,你并不能调用present这个函数! system("pause"); }在函数代码中,我定义了两个基类指针a1,b1;
a1引用的是基类,b1引用的是派生类
当它们同时调用consume函数时,如果consume是虚函数,则,调用引用的对象的consume函数
故 a1调用基类的函数,b1调用派生类的函数
如果consume不是虚函数,则,都调用基类的consume函数
即a1和b1调用基类的consume函数!
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android之获取手机上的图片和视频缩略图thumbnails
- android string.xml文件中的整型和string型代替
- Android java 与 javascript互访(相互调用)的方法例子
- 关于指针的一些事情
- android上改变listView的选中颜色
- String.intern
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Prototype源码浅析 String部分(二)
- c#中虚函数的相关使用方法
- Ruby中的String对象学习笔记
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- PostgreSQL ERROR: invalid escape string 解决办法
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题