- 1、本文档共95页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
class Counter{ unsigned value; public: Counter(int v=0) { } friend Counter operator++(Counter ); friend Counter operator++(Counter , int); void display()const { cout value ” ”; } }; Counter operator++(Counter cc) { ; ;} Counter operator++(Countercc,int) { Counter t; ; ;} int main() { Counter a(1), b(2), c; ++a; a.display(); c=b++; b.display(); c.display(); return 0?; } value=v; return cc cc.value++ t.value=cc.value++ return t 完成下列程序,使得输出为: 2 3 2 * * 计算机网络讲义 * 测试程序看看类里面有指针变量时,对象之间的逐个成员赋值会产生什么样的问题 * * 对于第一行的指针数组P,先析构后面的p[1],再析构p[0],还是和建立的顺序相反 * 例如:如果把加运算定义成全局函数,r是有理数类的对象,则2+r是一个合法的表达式。 例,r是类Rational的一个对象,对于表达式:2 + r 对友元函数不存在问题: operator+(Rational(2),r) //合法:不同类型时(2),会被编译器强制转换成同类型对象,参与运算 但是,对成员函数存在问题: (2).operator+(r) //非法:2不是一个对象,无this指针。 重载函数:友元函数 vs成员函数 第11章 运算符重载 什么是运算符重载 运算符重载的方法 几个特殊的运算符的重载 自定义类型转换运算符 运算符重载实例 类型转换--系统预定义类型间的转换 内置类型的特性: 隐式类型转换 ※ 赋值时 ※ 运算时 显式类型转换 ※ 强制转换法:(类型名)表达式 ※ 函数法:类型名(表达式) 自定义类型转换运算符 类类型能否和其他的类类型或内置类型互相转换? 内置类型之所以能互相转换是因为系统预先制定了转换的规则,并写好了完成转换的程序。 类类型与其它类类型或内置类型之间如何转换,编译器预先无法知道。类的设计者必须定义转换的方法。 类型转换 内置类型到类类型的转换 类类型到其它类型的转换 内置类型到类类型的转换 利用构造函数进行转换。 例如,对于Rational类的对象r,可以执行r=2。 此时,编译器隐式地调用Rational的构造函数,传给它一个参数2。构造函数将构造出一个num=2,den= 1的Rational类的对象,并将它赋给r。 不允许执行隐式转换:explicit构造函数 任何单参数的构造函数都可以被编译器用来执行隐式转换,即把内置类型转换成对应的类类型。 在某些情况下,隐式转换是不受欢迎的。 将单参数的构造函数定义为explicit,将告诉编译器不允许执行隐式转换。 如将Ratioanal类的构造函数定义成 explicit Rational(int n1 = 0, int n2 = 1) 则对于Rational类的对象r1和r2,执行 r1 = 2 + r2;编译器就会报错 类型转换 内置类型到类类型的转换 类类型到其它类型的转换 类类型到内置类型或其他类类型的转换 可以通过类型转换函数实现 类型转换函数必须重载成成员函数 类型转换函数的格式 operator 目标类型名 ( ) const { … return (结果为目标类型的表达式); } 类型转换函数的特点 无参数,无返回值 是const函数 Rational类到double的转换 转换函数的定义: operator double () const { return (double(n
文档评论(0)