您的位置:首页 > 编程语言 > C语言/C++

C++中的虚函数详解

2016-06-07 23:53 447 查看
#

**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++ string 虚函数