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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

[思考问题]

①各个运算符重载函数能不能用成员函数来实现?为什么?

相关文档
最新文档