c++实验程序:要运用到虚基类 帮我看看错在哪里
分别定义Teacher(教师)类和Cadre(干部)类,分别采用多重,公有,私有,继承派生方式由这两个类派生出新类Teacher_Cadre。要求:1、在两个基类中包括姓...
分别定义Teacher(教师)类和Cadre(干部)类,分别采用多重,公有,私有,继承派生方式由这两个类派生出新类Teacher_Cadre。要求:1、在两个基类中包括姓名、年龄、性别、地址、电话等数据成员。2、在Teacher类中还包括数据成员title(职称),在Cadre类中还包括数据成员post(职务),在Teacher_Cadre类中还包含数据成员wages。3、对两个基类中的姓名、年龄、性别、地址、电话等数据成员用相同的名字,在引用这些数据成员时,指定作用域。4、在类体中声明成员函数,在嘞体外定义成员函数。5、在派生类Teacher_Cadre的成员函数show中调用Teacher类中的display函数,输出姓名、年龄、性别、职称、地址、电话,然后再用cout语句输出职务与工资
#include<iostream>
#include<string>
using namespace std;
class Person
{public:
Person(string nam,int a,char s,string add,string num);
protected:
string name,address,number;
int age;
char sex;
};
Person::Person(string nam,int a,char s,string add,string num)
{this->name=nam;this->age=a;this->sex=s;this->address=add;this->number=num;}
class Teacher:virtual public Person
{public:
Teacher(string nam,int a,char s,string add,string num,string t);
protected:
string title;
void display();
}
Teacher::Teacher(string nam,int a,char s,string add,string num,string t):Person(nam,a,s,add,num)
{title=t;}
void Teacher::display()
{
cout<<"name:"<<name<<endl;
cout<<"age:"<<age<<endl;
cout<<"sex:"<<sex<<endl;
cout<<"address:"<<address<<endl;
cout<<"num:"<<number<<endl;
cout<<"title:"<<title<<endl;
}
class Cadre:virtual public Person
{public:
Cadre(string nam,int a,char s,string add,string num,string p):Person(nam,a,s,add,num)
{post=p;}
protected:
string post;
};
class Teacher_Cadre:public Teacher,public Cadre
{
public:
Teacher_Cadre(string nam,int a,char s,string add,string num,string t,string p,float w):Person(nam,a,s,add,num),Teacher(nam,a,s,add,num,t),
Cadre(nam,a,s,add,num,p)
{wage=w;}
void show();
private:
float wage;
};
void Teacher_Cadre::show()
{display();
cout<<"title:"<<post<<endl;
cout<<"wage:"<<wage<<endl;
}
int main()
{ Teacher_Cadre grad1("wang",45,'f',"山西","400","收到","收到",400);
grad1.show();
return 0;
} 展开
#include<iostream>
#include<string>
using namespace std;
class Person
{public:
Person(string nam,int a,char s,string add,string num);
protected:
string name,address,number;
int age;
char sex;
};
Person::Person(string nam,int a,char s,string add,string num)
{this->name=nam;this->age=a;this->sex=s;this->address=add;this->number=num;}
class Teacher:virtual public Person
{public:
Teacher(string nam,int a,char s,string add,string num,string t);
protected:
string title;
void display();
}
Teacher::Teacher(string nam,int a,char s,string add,string num,string t):Person(nam,a,s,add,num)
{title=t;}
void Teacher::display()
{
cout<<"name:"<<name<<endl;
cout<<"age:"<<age<<endl;
cout<<"sex:"<<sex<<endl;
cout<<"address:"<<address<<endl;
cout<<"num:"<<number<<endl;
cout<<"title:"<<title<<endl;
}
class Cadre:virtual public Person
{public:
Cadre(string nam,int a,char s,string add,string num,string p):Person(nam,a,s,add,num)
{post=p;}
protected:
string post;
};
class Teacher_Cadre:public Teacher,public Cadre
{
public:
Teacher_Cadre(string nam,int a,char s,string add,string num,string t,string p,float w):Person(nam,a,s,add,num),Teacher(nam,a,s,add,num,t),
Cadre(nam,a,s,add,num,p)
{wage=w;}
void show();
private:
float wage;
};
void Teacher_Cadre::show()
{display();
cout<<"title:"<<post<<endl;
cout<<"wage:"<<wage<<endl;
}
int main()
{ Teacher_Cadre grad1("wang",45,'f',"山西","400","收到","收到",400);
grad1.show();
return 0;
} 展开
1个回答
2018-11-29 · 百度认证:云南新华电脑职业培训学校官方账号
云南新华电脑学校
云南新华电脑学校是经云南省教育厅批准成立的省(部)级重点计算机专业学校,采用三元化管理模式,教学设备先进,师资雄厚学生毕业即就业,学院引进了电商企业入驻,创建心为电商创业园区,实现在校即创业
向TA提问
关注
展开全部
使用虚基类时应该注意:
1>一个类可以在一个类族中用作虚基类,也可以用作非虚基类。
2>在派生类的对象中,同名的虚基类只产生一个虚基类子对象,而某个非虚基类产生各自的对象。
3>虚基类子对象是由最派生类(最后派生出来的类)的构造函数通过调用虚基类的构造函数进行初始化。
4>最派生类是指在继承类结构中建立对象时所指定的类。
5>在派生类的构造函数的成员初始化列表中,必须列出对虚基类构造函数的调用,如果没有列出,则表示使用该虚基类的缺省构造函数。
6>在虚基类直接或间接派生的派生类中的构造函数的成员初始化列表中,都要列出对虚基类构造函数的调用。但只有用于建立对象的最派生类的构造函数调用虚基类的构造函数,而该派生类的所有基类中列出的对虚基类构造函数的调用在执行中被忽略,从而保证对虚基类子对象只初始化一次。
7>在一个成员初始化列表中,同时出现对虚基类和非虚基类构造函数的调用时,基类的构造函数先于非虚基类的构造函数执行。
8>虚基类并不是在声明基类时声明的,而是在声明派生类是,指定继承方式时声明的。因为一个基类可以在生成一个派生类作为虚基类,而在生成另一个派生类时不作为虚基类。
1>一个类可以在一个类族中用作虚基类,也可以用作非虚基类。
2>在派生类的对象中,同名的虚基类只产生一个虚基类子对象,而某个非虚基类产生各自的对象。
3>虚基类子对象是由最派生类(最后派生出来的类)的构造函数通过调用虚基类的构造函数进行初始化。
4>最派生类是指在继承类结构中建立对象时所指定的类。
5>在派生类的构造函数的成员初始化列表中,必须列出对虚基类构造函数的调用,如果没有列出,则表示使用该虚基类的缺省构造函数。
6>在虚基类直接或间接派生的派生类中的构造函数的成员初始化列表中,都要列出对虚基类构造函数的调用。但只有用于建立对象的最派生类的构造函数调用虚基类的构造函数,而该派生类的所有基类中列出的对虚基类构造函数的调用在执行中被忽略,从而保证对虚基类子对象只初始化一次。
7>在一个成员初始化列表中,同时出现对虚基类和非虚基类构造函数的调用时,基类的构造函数先于非虚基类的构造函数执行。
8>虚基类并不是在声明基类时声明的,而是在声明派生类是,指定继承方式时声明的。因为一个基类可以在生成一个派生类作为虚基类,而在生成另一个派生类时不作为虚基类。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询