C++实验---学生干部虚基类

学生干部虚基类

Description

基于Student(学生)类和Cadre(干部)类,采用多重继承方式由这两个类派生出新类Student_Cadre(学生兼干部)。
这两个基类均继承自Person类,包含姓名、年龄、性别、地址、电话等数据成员。在Student类中还包含数据成员major(专业),在Cadre类中还包含数据成员post(职务),
在Student_Cadre类中还包含数据成员wages(工资)。
注意使用虚基类使Student_Cadre只包含一份从Person类继承来的成员。

Input

学生干部的姓名,年龄,性别,专业,职位,地址,电话,薪水

修改该学生干部的新地址,新电话

Output

学生干部的信息

Sample Input

wangli
23
f
BeijingRoad
0532-61234567
software
president
1534.2
Taidonglu
0532-90827651
0531-28766143

Sample Output

name:wangli
age23
sex:f
address:BeijingRoad
tel:0532-61234567
major:software
post:president
wages:1534.2

name:wangli
age23
sex:f
address:Taidonglu
tel:0531-28766143
major:software
post:president
wages:1534.2

题目给定代码

int main( )
{
    
    
    string name, major, post, addr, tel;
    int age;
    char sex;
    float wage;
    cin>>name>>age>>sex>>addr>>tel>>major>>post>>wage;
 
    Student_Cadre st_ca(name, age, sex,  addr, tel, major, post,wage);
    st_ca.display( );
 
    cout<<endl;
    string newAddr, newTel1, newTel2;
    cin>>newAddr>>newTel1>>newTel2;
 
    st_ca.setAddr(newAddr);
    st_ca.Student::setTel(newTel1);
    st_ca.Cadre::setTel(newTel2);
    st_ca.display( );
    return 0;
}

code:

#include<iostream>
#include<string>
using namespace std;

class Person{
    
    
protected:
	string name;
	int age;
	char sex;
	string addr;
	string tel;
public:
	Person(string n,int a,char s,string Add,string t){
    
    
		name=n;
		age=a;
		sex=s;
		addr=Add;
		tel=t;
	}
	
	void setTel(string newTel){
    
    
		tel=newTel;
	}
};

class Student:virtual public Person{
    
    
protected:
	string major;
public:
	Student(string n,int a,char s,string Add,string t,string m):Person(n,a,s,Add,t){
    
    
		major=m;
	}
	
	void setTel(string newTel){
    
    
		tel=newTel;
	}
};

class Cadre:virtual public Person{
    
    
protected:
	string post;
public:
	Cadre(string n,int a,char s,string Add,string t,string p):Person(n,a,s,Add,t){
    
    
		post=p;
	}
	
	void setTel(string newTel){
    
    
		tel=newTel;
	}
};

class Student_Cadre:virtual public Student,virtual public Cadre{
    
    
	float wage;
public:
	Student_Cadre(string n,int a,char s,string Add,string t,string m,string p,float w):Student(n,a,s,Add,t,m),Cadre(n,a,s,Add,t,p),Person(n,a,s,Add,t){
    
    
		//注意虚基类继承需要调用派生树上面的所有父类的构造函数 
		wage=w;
	}
	
	void setAddr(string newAddr){
    
    
		addr=newAddr;
	}
	
	void display(){
    
    
		cout<<"name:"<<name<<endl;
		cout<<"age:"<<age<<endl;
		cout<<"sex:"<<sex<<endl;
		cout<<"address:"<<addr<<endl;
		cout<<"tel:"<<tel<<endl;
		cout<<"major:"<<major<<endl;
		cout<<"post:"<<post<<endl;
		cout<<"wage:"<<wage<<endl;
	}
};

int main( )
{
    
    
    string name, major, post, addr, tel;
    int age;
    char sex;
    float wage;
    cin>>name>>age>>sex>>addr>>tel>>major>>post>>wage;
 
    Student_Cadre st_ca(name, age, sex,  addr, tel, major, post,wage);
    st_ca.display( );
 
    cout<<endl;
    string newAddr, newTel1, newTel2;
    cin>>newAddr>>newTel1>>newTel2;
 
    st_ca.setAddr(newAddr);
    st_ca.Student::setTel(newTel1);
    st_ca.Cadre::setTel(newTel2);
    st_ca.display( );
    return 0;
}

猜你喜欢

转载自blog.csdn.net/timelessx_x/article/details/115357772