当前位置:文档之家› 实验5-运算符重载、继承 ( 1 )

实验5-运算符重载、继承 ( 1 )

实验五运算符重载、继承
●实验目的
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<<GetName()<<"\t"<<GetSex()<<"\t"<<GetAge()<<"\t";
}
};
教师类由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<<line.Length()<<endl;
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
[思考问题]
①各个运算符重载函数能不能用成员函数来实现?为什么?。

相关主题