通过示例小程序来帮助快速理解继承的功能
例题要求如下:
定义学生类,有姓名,学号,性别,年龄等私有成员变量,有构造函数,有打印信息的成员函数。
要求通过构造函数可以给属性赋予初始值。
定义大学生类,继承自学生类,大学生有专业名、成绩的私有成员变量,还有是否获得奖学金的成员函数(成绩为判断依据)。隐藏基类打印信息的成员函数,新的打印信息的成员函数也要能打印姓名、学号、性别、年龄信息。
要求通过构造函数可以给属性赋予初始值。
再定义研究生类,继承自大学生类,有导师姓名和工资的私有成员变量,有打印工资这个成员函数。
要求通过构造函数可以给属性赋予初始值。
#include <iostream>
using namespace std;
//学生类
class Student
{
private:
string name;
string numb;
string gender;
int age;
public:
Student(string name,string numb,string gender,int age)
:name(name),numb(numb),gender(gender),age(age)
{}
void printf()
{
cout<<"学生姓名:"<<name<<endl;
cout<<"学生学号:"<<numb<<endl;
cout<<"学生性别:"<<gender<<endl;
cout<<"学生年龄:"<<age<<endl;
}
};
//大学生类
class College_Student:public Student
{
private:
string major;
int score;
public:
College_Student(string name,string numb,string gender,int age,string major,int score)
:Student(name,numb,gender,age)
{
this->major=major;
this->score=score;
}
void printf()
{
Student::printf();
cout<<"学生专业:"<<major<<endl;
cout<<"学生成绩:"<<score<<endl;
}
/*//错误
// void printf()
// {
// cout<<"大学生姓名:"<<name<<endl;
// cout<<"大学生学号:"<<numb<<endl;
// cout<<"大学生性别:"<<gender<<endl;
// cout<<"大学生年龄:"<<age<<endl;
// cout<<"大学生专业:"<<major<<endl;
// cout<<"大学生成绩:"<<score<<endl;
// }*/
void show_scholarship()
{
if(score>=90)
{
cout<<"获得奖学金"<<endl;
}
else
{
cout<<"未能获得奖学金"<<endl;
}
}
};
//研究生类
class Postgraduate:public College_Student
{
private:
string tutor;
int salary;
public:
Postgraduate(string name,string numb,string gender,int age,string major,int score,string tutor,int salary)
:College_Student(name,numb,gender,age,major,score)
{
this->tutor=tutor;
this->salary=salary;
}
void printf()
{
College_Student::printf();
cout<<"研究生导师:"<<tutor<<endl;
cout<<"研究生工资:"<<salary<<endl;
}
/*//错误
// void printf()
// {
// cout<<"研究生姓名:"<<name<<endl;
// cout<<"研究生学号:"<<numb<<endl;
// cout<<"研究生性别:"<<gender<<endl;
// cout<<"研究生年龄:"<<age<<endl;
// cout<<"研究生专业:"<<major<<endl;
// cout<<"研究生成绩:"<<score<<endl;
// cout<<"研究生导师:"<<tutor<<endl;
// cout<<"研究生工资:"<<salary<<endl;
// }*/
void show_salary()
{
cout<<"研究生工资:"<<salary<<endl;
}
};
int main()
{
string name;
string numb;
string gender;
int age;
string major;
int score;
string tutor;
int salary;
//省事注释
// //学生
// cout<<"请输入学生的姓名、学号、性别、年龄:";
// cin>>name>>numb>>gender>>age;
// Student s1(name,numb,gender,age);
// s1.printf();
// //大学生
// cout<<"请输入大学生的姓名、学号、性别、年龄、专业、成绩:";
// cin>>name>>numb>>gender>>age>>major>>score;
// College_Student s2(name,numb,gender,age,major,score);
// s2.printf();
// s2.show_scholarship();
//研究生
cout<<"请输入研究生的姓名、学号、性别、年龄、专业、成绩、导师、工资:"<<endl;
cin>>name>>numb>>gender>>age>>major>>score>>tutor>>salary;
Postgraduate s3(name,numb,gender,age,major,score,tutor,salary);
s3.printf();
s3.show_scholarship();
s3.show_salary();
return 0;
}
通过在运行终端输入内容便可以获得要求的结果,如下图:
![](https://img-blog.csdnimg.cn/img_convert/a8c243d87affd0d7431329446f308063.png)