【基础题】【继承】继承的设计思路

#include<iostream>
#include<iomanip>
using namespace std;
class Person{
	private:
		string name;
		int age;
		char sex;
		string addr;
		string tel;
	public:
		Person(){}
		Person(string name,int age,char sex,string addr,string tel);
		void set(string,int,char,string,string);
		void display();
		
};
class Teacher:public Person {
	private:
		string title;
	public:
		Teacher();
		Teacher(string,int,char,string,string,string);
		void set(string,int,char,string,string,string);
		void display();
		
};
class Cadre:public Person{
	private:
		string post;
	public:
		Cadre();
		Cadre(string,int,char,string,string,string);
		void set(string,int,char,string,string,string);
		void display();
};
int main(){
	Teacher teacher("Wang-li",50,'f',"135 BeiJing Road,Shanghai","(021)61234567","President");
	teacher.display();
	teacher.set("Li-hua",23,'m',"NanJIng Road","5126833678","headmaster");
	teacher.display();
	return 0;
}
Person::Person(string name,int age,char sex,string addr,string tel){
	this->name = name;
	this->age = age;
	this->sex = sex;
	this->addr = addr;
	this->tel = tel;
}
void Person::set(string name,int age,char sex,string addr,string tel){
	this->name = name;
	this->age = age;
	this->sex = sex;
	this->addr = addr;
	this->tel = tel;
}
void Person::display(){
	cout<<"name:"<<name<<"\n";
	cout<<"age:"<<age<<"\n";
	cout<<"sex:"<<sex<<"\n";
	cout<<"addr:"<<addr<<"\n";
	cout<<"tel:"<<tel<<"\n";
}
Teacher::Teacher(string name,int age,char sex,string addr,string tel,string title):Person(name,age,sex,addr,tel){
	this->title = title;
}
void Teacher::set(string name,int age,char sex,string addr,string tel,string title){
	Person::set(name,age,sex,addr,tel);
	this->title = title;
}
void Teacher::display(){
	Person::display();
	cout<<"title:"<<title<<"\n";
}
Cadre::Cadre(string name,int age,char sex,string addr,string tel,string post):Person(name,age,sex,addr,tel){
	this->post = post;
}
void Cadre::set(string name,int age,char sex,string addr,string tel,string post){
	Person::set(name,age,sex,addr,tel);
	this->post = post;
}
void Cadre::display(){
	Person::display();
	cout<<"post:"<<post<<"\n";
}

当两个类都有共同的成员变量时,我们可以把这些变量放在一个基类中,如本题将姓名、年龄、性别、地址、手机号码,这些成员变量放在基类Person中,并通过有参构造函数或set函数对齐进行初始化,并通过display()函数将其输出。
在写派生类Teacher 时新增一个成员变量title,我们应该考虑如何对基类成员变量以及新增的变量进行初始化,我们可以通过有参构造函数或set()函数对其进行初始化,值得注意的是我们在派生类中是可以通过基类名::函数名调用基类的函数。还有一点在调用基类构造函数时,只能使用参数初始化表并且在函数内部对新增的成员变量初始化。或者通过set()函数,先调用基类的set()函数,再对新增的成员变量初始化。
在写display()函数时,我们可以先调用基类的display()函数。
在主函数中,我们创建派生类对象后,是可以调用基类的函数,但是当你在派生类中重写后,调用的便是派生类重写的函数,例如此题的set()和display()函数都是重写的,故会调用重写后的函数。

注意:在派生类中调用基类的函数时,如果该函数没有被重写,可以直接使用;如果该函数被重写,那么要通过类名::函数名来调用。

基类成员变量、无参、有参构造函数、set、get、display函数

派生类成员变量、无参、有参构造函数、set函数对其基类成员变量初始化、display函数(派生类内部调用基类成员函数)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值