C++程序语言13B.pptVIP

  • 1
  • 0
  • 约6.59千字
  • 约 21页
  • 2017-12-26 发布于河北
  • 举报
C程序语言13B

C++程序设计实用教程 清华大学出版社 2008 第13章 运算符重载 运算符概述 重载运算符 13.2.1 重载双目运算符 13.2.2 重载单目运算符 13.2.3 Date类的综合测试 *自定义版字符串类———String *趣味程序———“评委评分” 程序之类模板应用 小结 13.2.2 重载单目运算符 本小节主要内容 1. 重载前增(减)量运算符 ++对象 --对象 特点 先增(减)值,再以新值参加所在表达式的其他运算; 结果可以作左值。 2. 重载后增(减)量运算符 对象++ 对象— 特点 先以原值参加所在表达式的其他运算一次,再增(减)值; 只能作右值。 将准确地回答后增(减)量运算不能作左值的原因。 13.2.3 Date类的综合测试 打印日历 13.2.3 Date类的综合测试 日期数据域单向链表 13.3 自定义版字符串类String 本节的例子中有关于重载方括号运算符的语法及使用方法。 重载方括号运算符后,对于对象(例如对象s)而言,需注意对象的地址(如s)与s[0]是不同的,s[0]也不是s。 C++提供的字符串类string具有很强的功能。 在本节中,直接将C-字符串进行封装,设计一个自定义版的字符串类———String。 该类的设计方法与功能皆与string类有较大差别。 此处并不是想用String取代string,而是通过这个较完整、涉及较多知识点的例子使读者加深对相关知识点,特别是C-字符串及string的理解。 13.3 自定义版字符串类String 设计思想 ——— 封装C-字符串 数据成员 char *str; // 特点:对象带资源 成员函数 构造函数(提供多种情形下构造对象的方法) 深拷贝构造函数 深赋值运算符函数 析构函数 运算符函数 方括号运算([ ]) 拼接运算(+,+=) 关系运算(, =, , =, ==, !=) I/O运算(,) 关于方括号运算符 char String::operator[](int index) { return str[index]; } 注 void test() { int i=0; String s=”world”; s[i] = ’W’; // 运算符函数调用。s是对象,并非地址 } 这里 s是对象,不是地址。没有s+i运算 s[i]不能写成 *(s+i); (s[0])不是对象的地址,而是对象所带资源的地址。 关于字符串拼接运算 operator+ 为何设计成友元函数? void test() { int i=0; String s=”world”, s1; s1 = ”Hello, ” + s; s1 = s + ”, 你好!”; // s1 = ”Hello, ” + ”world”; 错误! s1 = String(”Hello, ”) + ”world”; s1 = ”Hello, ” + String(”world”); } 答:由于第一个操作数不一定是String对象 当第一个操作数为char*类型时,利用了转换构造函数 String(const char*?=””);创建临时对象。 当两个操作数均为char*时,没有这样的运算符函数。 关于两个操作数相同的双目运算 String String::operator=(const String Str) { if(Str==this) return *this; delete [] str; str = new char[strlen(Str.str)+1]; strcpy(str, Str.str); return *this; } 注 void test() { String s=”world”; s = s; // 自我赋值 } 第13章 运算符重载 第2讲 本章要点 通过实例学语法 Date Date::operator++() // 前增量运算符函数 { days[1] = isLeapyear() ? 29 : 28; day++; if(day days[month-1]){ day = 1; month++; } if(month12){ month = 1; year++;} return *this; // 引用返回“本对象”,可作左值 } Date Date::operator--() // 前减量运算符函数 { days[1] = isLeapyear() ? 29 : 28; if(day==1

文档评论(0)

1亿VIP精品文档

相关文档