people为基类,student和graduate为子类,重载“==”运算符

 //people为基类,student和graduate为子类,重载“==”运算符

//输入2个学生的信息:姓名、编号、身份证号、班级、专业

//输入1个研究生的信息:姓名、编号、身份证号、班级、专业、导师

//重载“==”,当两个学生的编号相同时,调用重载运算符,输出错误信息

源代码如下:

#include <iostream>
#include <string>
using namespace std;
//定义基类
class People

{

public:
//成员变量:姓名,编号,身份证号
  string name;
  string number;
  string id_number;

public:
  People() {} //无参数的构造函数
  People(string name1,string number1,string id_number1){
  name = name1;
  number = number1;
  id_number = id_number1;
}
//声明input,,output,类外定义
void input();
void output();
};
//定义基类的成员函数input()
void People:: input()

{
  //输入姓名,编号,身份证号
  cin >> name;
  cin >> number;
  cin >> id_number;
}
//定义基类的成员函数output()
void People:: output()

{
  //输出姓名,编号,身份证号
  cout << " name : " << name;
  cout << " number : " << number;
  cout << " id_number : " << id_number;
}

//子类student
class Student:public People

{
  //成员变量班级,专业
public:
  string Class;
  string major;
public:
  Student(){}
  Student(string name1,string number1,string id_number1,string Class1,string major1):People(name1,number1,id_number1){
  Class = Class1;
  major = major1;
}
void input();

void output();
bool operator ==(const Student &);

};
//子类的成员函数中,调用基类的成员函数input()
void Student::input()

{
  People::input();
  //输入班级专业
  cin>>Class>>major;
}
void Student::output()

{
  People::output();
  //输出班级专业
  cout << " Class : "<< Class;
  cout << " major : "<< major<<endl;

}
//运算符“==”重载
bool Student::operator ==(const Student &s)

{

  if(number ==s.number)

  {
    cout<<"两个学生编号相同,不合法!";
    exit(1);
  }

  else

  {
    return 1;
  }
}

//子类Graduate(研究生)
class Graduate:public Student

{
public:
  string daoshi;
public:
  Graduate(){}
  Graduate(string name1,string number1,string id_number1,string Class1,string major1,string daoshi1):Student(name1,number1,id_number1,Class1,major1)
  {
    daoshi = daoshi1;
  }
  void input();
  void output();
};

void Graduate::input()

{
  Student::input();
  cin >>daoshi;
}
void Graduate::output()

{
  Student::output();
  cout<<" daoshi : "<<daoshi<<endl;
}

int main()
{
  Student s1;
  Student s2;
  Graduate g;
  cout<<" please input the student info : "<<endl;
  s1.input();
  cout<<" please input the student info : "<<endl;
  s2.input();
  s1==s2; //调用“==”重载,判断两个学生的编号是否相同
  cout<<" please input the graduate info: "<<endl;
  g.input();
  cout<<" please show the students info:"<<endl;
  s1.output();
  s2.output();
  cout<<" show the graduate info: "<<endl;
  g.output();
  return 1;
}

 

运行结果: 

 

转载于:https://www.cnblogs.com/duanqibo/p/11102078.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 根据所给的基类student和teacher,可以定义graduategraduate可以继承student和teacher的属性和方法,并且可以添加自己的属性和方法。例如,graduate可以添加毕业论文的属性和方法,以及毕业典礼的方法等。同时,graduate也可以重写父的方法,以适应自己的需求。 ### 回答2: graduate是一个派生,它从student和teacher继承了一些属性和方法,并且额外定义了一些特定于研究生的属性和方法。 首先,graduate应该从student和teacher分别继承学生和教师的基本属性和行为。比如,一个研究生需要考试、提交作业,参加论文答辩等,这些行为都可以从student中继承。但是,研究生还需要根据自己的研究方向进行论文研究和实验,因此还需要从teacher中继承一些特定的方法和属性。 其次,graduate还应该有一些特定于研究生的属性和方法。比如,一个研究生需要有研究方向和导师,需要根据自己的研究方向进行实验和论文撰写等等。因此,graduate应该提供研究方向、导师、实验、论文撰写等属性和方法。 最后,graduate还可以定义一些特定的方法和属性来满足研究生的个性化需求。比如,研究生可能需要参加国际会议和研讨会,因此可以定义一个方法来支持这个功能;又或者,研究生需要披露一些研究成果,可以定义一个属性来存储这些成果。 在整个graduate的设计中,最重要的是要遵循封装、继承和多态的原则,确保尽可能的复用代码,同时保持代码的可维护性和易读性。 ### 回答3: 在定义graduate之前,我们需要先了解一下基类student和teacher的结构和属性。 student通常含有以下属性:姓名、学号、性别、年龄、国籍、成绩等;含有以下方法:获得或设置姓名、获得或设置学号、获得或设置性别、获得或设置年龄、获得或设置国籍、获得或设置成绩等。 teacher通常含有以下属性:姓名、工号、性别、年龄、专业、授课科目等;含有以下方法:获得或设置姓名、获得或设置工号、获得或设置性别、获得或设置年龄、获得或设置专业、获得或设置授课科目等。 有了这些基础的知识,我们就可以根据graduate的特点来定义它的属性和方法了。 首先,graduatestudent和teacher的衍生,因此需要引用基类的属性和方法。其次,graduate还有自己的一些特点,如研究方向、导师等。 对于graduate的属性,我们可以定义以下内容:姓名、学号、性别、年龄、国籍、成绩、工号、专业、授课科目、研究方向、导师等。其中,姓名、学号、性别、年龄、国籍、成绩等是从student继承来的属性,工号、专业、授课科目等是从teacher继承来的属性,研究方向、导师等是graduate自己的属性。 对于graduate的方法,我们可以定义以下内容:获得或设置姓名、获得或设置学号、获得或设置性别、获得或设置年龄、获得或设置国籍、获得或设置成绩、获得或设置工号、获得或设置专业、获得或设置授课科目、获得或设置研究方向、获得或设置导师等。这些方法似于基类的方法,只是新增了研究方向、导师等特有的属性和方法。 在实际的程序开发中,可以使用继承来实现graduate的定义。具体而言,可以使用继承的方式,让graduate继承student和teacher的属性和方法,在此基础上再定义自己特有的属性和方法。当然,为了避免出现命名冲突等问题,需要在定义graduate时注意属性和方法的命名规范。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值