实验5-运算符重载、继承 ( 1 )
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验五运算符重载、继承
●实验目的
1、了解类的两种使用方式。
2、学习从现有类派生出新类的方式。
3、了解在派生类中如何使用基类的成员。
4、了解基类成员在派生类中的访问控制。
5、掌握运算符重载的方法。
●实验内容
1、从类Person中派生出一个教师类,新增的属性有专业(Specialty)、职称(Position)和主讲课程(MajorCourse,一门),并为这些属性定义相应的方法。
[实现要求]
Person类的设计如下,请将空白处补充完整。
class Person
{
string Name;
int Age;
string Sex;
public:
void Register(char *name,int age,char *sex)
{
;
Age=age;
Sex=sex;
}
string GetName() { }
string GetSex() { return Sex; }
int GetAge() { }
void ShowMe()
{
cout< } }; 教师类由Person类共有派生出来,主函数设计如下: int main() { Teacher t; t.ShowMe(); //创建Teacher类对象t后直接显示各成员的值,在Teacher类中应有不 //带参数的构造函数去初始化各个成员的值,使其显示运行结果的第一行t.TeacherRegister("张三",40, "f","计算机","副教授","C++"); t.ShowMe(); return 0; } 运行结果如下: XXX m 0 XXX XXX XXX 张三 f 40 计算机副教授C++ [思考问题] ①在Teacher类中是否要需要重新定义ShowMe成员函数?不重新定义ShowMe成员函数能否得到上述要求的运行结果?为什么? 2、从Point类中派生出一个Line类。Line类增加一个数据成员EndPoint,计算线的长度。 [实现提示] Point类可以按下面方式进行设计: class Point{ int x,y; public: Point(int a=0,int b=0){SetPoint(a,b);} void SetPoint(int a,int b); //设置点的坐标值 int GetX(){return x;} int GetY(){return y;} void Print(); //显示点的坐标值 }; Line类增加一个数据成员EndPoint为Point类对象,注意在设计Line类的构造函数时应为其基类和对象成员EndPoint提供形参。 为了检验Line类的功能,主函数按如下方式设计: int main(){ Line line(1,1,10,10); cout<<"Line line:"; line.Print(); cout<<"\n线line的长度:"; cout< return 0; } 运行结果如下: Line line:开始点:[1,1];结束点:[10,10] 线line的长度:12.7279 3、对实验4中的第3题设计的Time类进行修改,通过重载“+”、“-”运算符直接进行时间的加减运算。 [实现要求] (1)用友元函数来实现运算符的重载 (2)加法运算符可以是两个Time对象进行相加,也可以是一个表示秒数的int型数据加 上一个Time对象,可以是Time对象加上int型数据,得到的结果都是Time类型的对象。 (3)减法运算符可以是两个Time对象进行相减,也可以是Time对象减去一个表示秒数 的int型数据,得到的结果都是Time类型的对象。 按照以上要求,主函数设计如下: void main() { Time t1(2,34),t2,t3; t2.SetTime(13,23,34); cout<<"\nt1+t2:"; t3=t1+t2; //两个Time类对象相加 t3.print_24(); cout<<"\nt1+65:"; t3=t1+65; //Time类对象加上65秒 t3.print_24(); cout<<"\n65+t1:"; t3=65+t1; //65秒加上Time类对象 t3.print_24(); cout<<"\nt1-t2:"; t3=t1-t2; //两个Time类对象相减 t3.print_24(); cout<<"\nt1-70:"; t3=t1-70; //Time类对象减去70秒 t3.print_24(); } 运行结果如下: t1+t2:15:57:34 t1+65:02:35:05 65+t1:02:35:05 t1-t2:10:49:34 t1-70:02:32:50 [思考问题] ①各个运算符重载函数能不能用成员函数来实现?为什么?