虚基类的简单应用

#include<iostream>
#include<string>
using namespace std;
class person 
{
public:
person(string nam,char se,int ag)
{
name=nam;
sex=se;
age=ag;
}
protected:
string name;
char sex;
int age;
};
class student:virtual public person
{
public:
student(string nam,char se,int ag,string ti):person(nam,se,ag),title(ti){}
protected:
string title;
};
class teacher:virtual public person
{
public:
teacher(string nam,char se,int ag,int sco):person(nam,se,ag),score(sco){}
protected:
int score;
};
class AA:public student,public teacher
{
public:
AA(string nam,char se,int ag,string ti,int sco,int wa):person(nam,se,ag),student(nam,se,ag,ti),teacher(nam,se,ag,sco),wage(wa){
}
void display()
{
cout<<"name:"<<name<<endl;
cout<<"sex:"<<sex<<endl;
cout<<"age:"<<age<<endl;
cout<<"title:"<<title<<endl;
cout<<"score:"<<score<<endl;
cout<<"wage:"<<wage<<endl;
}
private:
int wage;
};
int main()
{
AA aa("wenming",'m',20,"student",540,2000);
aa.display();
return 0;
}
这个是没有用虚基类代码:
#include<iostream>
#include<string>
using namespace std;
class person 
{
public:
person(string nam,char se,int ag)
{
name=nam;
sex=se;
age=ag;
}
protected:
string name;
char sex;
int age;
};
class student: public person
{
public:
student(string nam,char se,int ag,string ti):person(nam,se,ag),title(ti){}
protected:
string title;
};
class teacher: public person
{
public:
teacher(string nam,char se,int ag,int sco):person(nam,se,ag),score(sco){}
protected:
int score;
};
class AA:public student,public teacher
{
public:
AA(string nam,char se,int ag,string ti,int sco,int wa):student(nam,se,ag,ti),teacher(nam,se,ag,sco),wage(wa){
}
void display()
{
cout<<"name:"<<student::name<<endl;//修改 
cout<<"sex:"<<student::sex<<endl;//修改 
cout<<"age:"<<student::age<<endl;//修改 
cout<<"title:"<<title<<endl;
cout<<"score:"<<score<<endl;
cout<<"wage:"<<wage<<endl;
}
private:
int wage;
};
int main()
{
AA aa("wenming",'m',20,"student",540,2000);
aa.display();
return 0;
}