Presentation is loading. Please wait.

Presentation is loading. Please wait.

第11章 使用类.

Similar presentations


Presentation on theme: "第11章 使用类."— Presentation transcript:

1 第11章 使用类

2 内容 运算符重载 友元函数 重载<<

3 一些建议 不要害怕错误 更全面了解C++的机制 不要觉得必须使用所有特性,不要在第一次学习时就试图使用所有特性

4 1. 运算符重载 目的:美化操作,更符合人的思维,更抽象 做法:重载操作符 数组的加法 其它
for (int i = 0; i < 20; i++) evening[i] = sam[i] + janet[i]; // add element by element evening = sam + janet; // add two array objects 其它

5 运算符重载格式 C++内部表达 operator op(argument-list) district2 = sid + sara; //
+ C++内部表达 district2 = sid + sara; // district2 = sid.operator+(sara);

6 2. 计算时间:一个运算符重载示例 时间的加法 Time Sum(const Time& t)const;
total = coding.Sum(fixing); 示例20

7 2.1 添加加法运算符 重载+ Time operator+(const Time & t)const;
total = coding+fixed; 示例21

8 2.2 重载限制 多数C++运算符(表11.1)可以重载 要求 要求至少一个操作数是用户自定义 不改变原有句法规则 不能创建新的运算符
不能重载的运算符…. 只能通过成员函数进行重载

9 2.3 其他重载运算符 -和* 23

10 3. 友元 某些特定的情况下,方便访问私有成员。 友元函数 友元类 友元成员函数

11 例子 A = B*2.75 A = 2.75*B; //最好可以使用 A = B.operator*(2.75);
Time operator*(double, const Time &);//非成员函数

12 3.1 创建友元 将下列语句放在Time 声明中 friend Time operator*(double m, const Time & t); // goes in class declaration operator*不是类里的函数 operator*函数内部可以随意访问Time的私有成员

13 3.2 常用的友元:重载<<运算符 cout << trip; //非常方便
cout << "Trip time: " << trip << " (Tuesday)\n"; // can do <<是从左到右的

14 4. 重载运算符:作为成员函数还是非成员函数 operator+ 成员函数 非成员函数 两者都可以,只能选其中一个
Time operator+(const Time & t) const; 非成员函数 friend Time operator+(const Time & t1, const Time & t2); 两者都可以,只能选其中一个

15 5. 再谈重载:一个矢量类 表示 分量(直角坐标系) 长度和方向(极坐标) 运算 示例5

16 5.1 使用状态成员 mode,控制不同的表示方式

17 5.2 为vector类重载算术运算符 + 返回局部变量 返回构造函数 *

18 5.3 对实现的说明 有些信息 作为成员,可以提前计算好,返回成员 不作为成员,返回时临时计算

19 5.4 使用vector类来模拟随机漫步 醉鬼走路问题 随机走动 距离原始位置不超过给定长度 随机生成角度,长度是输入的

20 6. 类的自动转换和强制类型转换 用构造函数来转换 用于转换的构造函数只能有一个参数 explicit关闭隐式转换

21 6.1 转换函数 把对象转成别的类型 operator int(); 谨慎地使用隐式转换函数

22 6.2 转换函数和友元函数 重载运算有两种方式

23 7. 总结


Download ppt "第11章 使用类."

Similar presentations


Ads by Google