任务描述
本关任务:设计学生和教师两个类,并实现它们之间的转换。
转换构造函数
一个构造函数接收一个不同于其类类型的形参,可以视为将其形参转换成类的一个对象,像这样的构造函数称为转换构造函数。因此转换构造函数的作用就是将一个其他类型的数据转换成一个类的对象。
除了创建类对象之外,转换构造函数还为编译器提供了执行隐式类型转换的方法。只要在需要类的类型值的地方,给定构造函数的形参类型的值,就将由编译器执行这种类型的转换。
转换构造函数是构造函数的一个特例,当一个构造函数的参数只有一个,而且是一个其他类型的 const 引用时,它就是一个转换构造函数。
编程要求
在右侧编辑器中的Begin-End
之间补充代码,设计学生和教师两个类,类中成员变量都为私有,成员函数都为公有,并实现它们之间的转换,具体要求如下:
-
学生类( Student )
-
编号:
int number
-
姓名:
string name
-
性别:
string sex
-
带参构造函数:
Student(int num,string nam,string se)
,用三个参数对应初始化内部的三个成员变量。 -
输出函数:
void Print()
函数,输出学生信息,格式为:学生:name,编号:number,性别:sex
。
-
-
教师类( Teacher )
-
与 Student 类有三个同样的成员变量
-
输出函数:
void Print()
,输出教师信息,格式为:教师:name,编号:number,性别:sex
的格式打印三个成员变量
-
- 转换构造函数,用于从 Student 类转换到 Teacher 类,它将 Student 对象的成员变量对应复制 Teacher 对象的成员变量中。
实训代码:
#include <iostream>
#include <string>
using namespace std;
/********* Begin *********/
// 前置声明 Teacher 类
class Teacher;
class Student //学生类的声明
{
private:
int number;
string name;
string sex;
public:
friend class Teacher;
Student(int num,string nam,string se)
{
number=num;
name=nam;
sex=se;
}
void Print()
{
cout<<"学生:"<<name<<",编号:"<<number<<",性别:"<<sex<<endl;
}
};
//学生类的定义
class Teacher//教师类的声明
{
private:
int number;
string name;
string sex;
public:
Teacher(const Student &t)
{
number=t.number;
name=t.name;
sex=t.sex;
}
void Print()
{
cout<<"教师:"<<name<<",编号:"<<number<<",性别:"<<sex<<endl;
}
};
//教师类的定义
/********* End *********/