虚基类简介及使用示例

本文介绍了虚基类在C++中的作用,它能够确保在多继承时,共同基类的数据成员只保留一份。通过源代码示例展示了如何声明和使用虚基类,并在初始化过程中详细阐述了成员的构造顺序。强调了在能用单一继承解决问题时,避免使用多重继承。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.源代码

#include
#include
using namespace std;
class Person//声明公共基类
{
public:
Person(string m,char x,int n)//构造函数 
{
ming=m;
xing=x;
nianling=n;
}
protected:
string ming;
char xing;
int nianling;
};
class Teacher:virtual public Person//声明Person的直接派生类 Teacher并且声明Person为公用继承的基类 
{
public:
Teacher(string m,char x,int n,string zh):Person(m,x,n)//构造函数
{
zhecheng=zh;
}
protected:
string zhecheng;
};
class Student:virtual public Person//声明Person的直接派生类 student并且声明Person为公用继承的基类
{
public:
Student(string m,char x,int n,float cheng):Person(m,x,n)//构造函数
{
chengji=cheng;
}
protected:
float chengji;
};
class Graduat:public Teacher,public Student//声明多重继承的派生类Graduat,Teacher和Studentp为直接基类 
{
public:
Graduat(string m,char x,int n,string zh,float cheng,float ji):Person(m,x,n),Teacher(m,x,n,zh),Student(m,x,n,cheng)
{
jingtei=ji;
}
void f()//输出研究生的有关的数据 
{
cout<<"姓名:"<<ming<<endl;
cout<<"性别:"<<xing<<endl;
cout<<"年龄:"<<nianling<<endl;
cout<<"职称:"<<zhecheng<<endl;
cout<<"成绩:"<<chengji<<endl;
cout<<"津贴:"<<jingtei<<endl;
}
private:
float jingtei;
};
int main()
{
Graduat yanjiusheng("LV",'n',20,"jiaoshou",98.5,80000);
yanjiusheng.f();
return 0;
}

结果:
姓名:LV
性别:n
年龄:20
职称:jiaoshou
成绩:98.5
津贴:80000

--------------------------------
Process exited with return value 0
Press any key to continue . . .

2.运行截图

在这里插入图片描述

3.总结分析

虚基类的作用:在继承间接共同基类时只保留一分成员。(例题中对共同基类中的name,
xing,nianling等数据成员都只保留一份)
使用方法:在声明派生类时加上virtual(例:上边源代码中class Teacher:virtual public Person//声明Person的直接派生类 Teacher并且声明Person为公用继承的基类 )
初始化过程中先对基类中的三个数据进行初始化,接着在依次初始化zhecheng,chengji,jingtei
注意:如果能用单一继承解决的问题不要使用多重继承

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值