[槲寄生小记]Teacher类和Cadre类及派生类Teacher_Cadre类

题目:2023-2024(1)C++程序设计实验4-by Lyx-继承与派生

  

The night falls. The beasts howl. The owls sob. Their feet treading on the ground are just like the roots embedded into the soil.

夜幕降临了,野兽嘶鸣,夜枭呜咽。它们的脚步踏在大地上,如同树木的根须扎入泥土中。

一, 题目要求:

1.总体要求

        分别声明Teacher(教师)类Cadre(干部)类,采用多重继承方式由这两个类派生出新类Teacher_Cadre(教师兼干部)类

2.基类要求

        (1)在两个基类中都包含姓名年龄性别地址电话等数据成员;

        (2)在Teacher类中还包含数据成员title(职称),在Cadre类中还包含数据成员post(职务),在Teacher_Cadre类中还包含数据成员wages(工资)

        (3)对两个基类中的姓名年龄性别地址电话等数据成员用相同的名字,在引用这些数据成员时,指定作用域;

        (4)在类体中声明成员函数,在类外定义成员函数;(题目要求,*友元一般在类外定义)

3.派生类要求

        (1)在派生类Teacher_Cadre成员函数show调用Teacher类中的display函数,输出姓名、年龄、性别、职称、地址、电话,然后再用cout语句输出职务与工资。

4.输入形式

          姓名 年龄 性别 职称 地址 电话 职务 工资

       【样例输入】

ZhangSan 18 male lecturer TaishanRoad143 18633335555 principal 90000

4.输出形式

          姓名 年龄 性别 职称 地址 电话 职务 工资

       【样例输出】

ZhangSan 18 male lecturer TaishanRoad143 18633335555 principal 90000

二, 题目解析

1.答案

#include<iostream>
using namespace std;
class Teacher{
protected:
	string name;
	int age;
	string sex;
	string address;
	string telephone;
	string title;
public:
	Teacher(string name1,int age1,string sex1,string address1,string tele,string title1){
		name=name1;
		age=age1;
		sex=sex1;
		address=address1;
		telephone=tele;
		title=title1;
	}
	void display();
}; 
void Teacher::display(){
	cout<<name<<" "<<age<<" "<<sex<<" "<<title<<" "<<address<<" "<<telephone;
}
class Cadre{
protected:
	string Cname;
	int Cage;
	string Csex;
	string Caddress;
	string Ctelephone;
	string Cpost;
public:
	Cadre(string name1,int age1,string sex1,string address1,string Ctele,string post){
		Cname=name1;
		Cage=age1;
		Csex=sex1;
		Caddress=address1;
		Ctelephone=Ctele;
		Cpost=post;
	}
	void display();
}; 
void Cadre::display(){
	cout<<Cname<<" "<<Cage<<" "<<Csex<<" "<<Cpost<<" "<<Caddress<<" "<<Ctelephone;
}
class Teacher_Cadre: public Teacher,public Cadre{
protected:
	double wage;
public:
	Teacher_Cadre(string nam,int a,string s,string ad,string tele,string ti,string po,double wa):Teacher(nam,a,s,ad,tele,ti),Cadre(nam,a,s,ad,tele,po),wage(wa){
	}
	void show();
};
void Teacher_Cadre::show(){
	cout<<name<<" "<<age<<" "<<sex<<" "<<title<<" "<<address<<" "<<telephone<<" "<<Cpost<<" "<<wage;
}
int main(){
	string name2;
	int age2;
	string sex2;
	string title2;
	string address2;
	string telephone2;
	string post2;
	double wage;
	cin>>name2;
	cin>>age2;
	cin>>sex2;
	cin>>title2;
	cin>>address2;
	cin>>telephone2;
	cin>>post2;
	cin>>wage;
	Teacher_Cadre tg1(name2,age2,sex2,address2,telephone2,title2,post2,wage);
	tg1.show();
	return 0;
}

2.分步解析

        1.Teacher类的声明与定义

class Teacher{
protected:
	string name;
	int age;
	string sex;
	string address;
	string telephone;
	string title;
public:
	Teacher(string name1,int age1,string sex1,string address1,string tele,string title1){
		name=name1;
		age=age1;
		sex=sex1;
		address=address1;
		telephone=tele;
		title=title1;
	}
	void display();
}; 
void Teacher::display(){
	cout<<name<<" "<<age<<" "<<sex<<" "<<title<<" "<<address<<" "<<telephone;
}
[常见问题]

*telephone等无需计算的长数字可用string储存

**protected数据使其便于在保障数据安全性的同时可以让派生类以public形式访问

   private则无法访问

***注意类的构造函数的参数顺序.数量与其所声明的变量一致

****类内声明/类外定义

void display();//类内

void Teacher::display(){
	cout<<name<<" "<<age<<" "<<sex<<" "<<title<<" "<<address<<" "<<telephone;//类外

        2.cadre类的声明与定义

class Cadre{
protected:
	string Cname;
	int Cage;
	string Csex;
	string Caddress;
	string Ctelephone;
	string Cpost;
public:
	Cadre(string name1,int age1,string sex1,string address1,string Ctele,string post){
		Cname=name1;
		Cage=age1;
		Csex=sex1;
		Caddress=address1;
		Ctelephone=Ctele;
		Cpost=post;
	}
	void display();
}; 
void Cadre::display(){
	cout<<Cname<<" "<<Cage<<" "<<Csex<<" "<<Cpost<<" "<<Caddress<<" "<<Ctelephone;
}

        3.Teacher_Cadre类的声明与定义

class Teacher_Cadre: public Teacher,public Cadre{
protected:
	double wage;
public:
	Teacher_Cadre(string nam,int a,string s,string ad,string tele,string ti,string po,double wa):Teacher(nam,a,s,ad,tele,ti),Cadre(nam,a,s,ad,tele,po),wage(wa){
	}
	void show();
};
void Teacher_Cadre::show(){
	cout<<name<<" "<<age<<" "<<sex<<" "<<title<<" "<<address<<" "<<telephone<<" "<<Cpost<<" "<<wage;
}
[常见问题]

*注意类的构造函数的参数顺序.数量与其所声明的变量一致

**派生类构造函数注意其基类参数(顺序,数量一致) 以':'开始','分隔参数组,对于基类中没有的变量,加上 变量名(变量) 作为参数

Teacher_Cadre(string nam,int a,string s,string ad,string tele,string ti,string po,double wa):Teacher(nam,a,s,ad,tele,ti),Cadre(nam,a,s,ad,tele,po),wage(wa){
	}
	void show();
};

        4.主函数

int main(){
	string name2;
	int age2;
	string sex2;
	string title2;
	string address2;
	string telephone2;
	string post2;
	double wage;
	cin>>name2;
	cin>>age2;
	cin>>sex2;
	cin>>title2;
	cin>>address2;
	cin>>telephone2;
	cin>>post2;
	cin>>wage;
	Teacher_Cadre tg1(name2,age2,sex2,address2,telephone2,title2,post2,wage);
	tg1.show();
	return 0;
}

三,常见错误

5	2	E:\1111111.cpp	[Error] 'string' does not name a type

原因:可能未输入 using namespace std;

51	153	E:\1111111.cpp	[Error] no matching function for call to 'Teacher::Teacher(std::string&, int&, std::string&, std::string&, std::string&)'

原因:类名前后不一致/参数个数不一致/参数顺序不一致


20世纪20年代,立体派艺术蓬勃兴起。强调几何特征的风潮不仅影响了克莱斯勒大厦,也改变了女性的时尚风格。全新的剪裁设计,正揭示着一场不协调的碰撞变革——现代化。

21世纪20年代,  我们在智能化与自动化的浪潮中翻滚前进,成为另一场变革的生动一幕


  • 41
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值