#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()函数都是重写的,故会调用重写后的函数。
注意:在派生类中调用基类的函数时,如果该函数没有被重写,可以直接使用;如果该函数被重写,那么要通过类名::函数名来调用。