网站大量收购独家精品文档,联系QQ:2885784924

C++(day12)C++实务精选罕见资源大集合.docx

C++(day12)C++实务精选罕见资源大集合.docx

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C++笔记 2007 年 4 月 6 日 1、拷贝构造函数和运算符重载 当类的成员变量中出现指针类型的时候,需要动态申请空间,这样就需要解决浅拷 贝的问题 在声明对象的同时用另一个对象为其赋值,会调用拷贝构造函数。 系统提供的默认拷贝构造函数,是浅拷贝,我们可以自己写一个拷贝构造函数,把指针指向的变量也拷贝过去 类中的成员变量出现指针类型,当两个对象都创建出来了以后,相互赋值的时候,就 需要重载赋值运算符号 手工为指针指向的变量赋值 2、其他的运算符号重载 对于对象之间的加减操作,系统是不允许的,但通过自己的运算符重载,按照自己的规则, 实现对象之间的运算操作。 Integer operator+(const Integer i){ int t = *p + *(i.p); Integer temp(t); return temp; } (1)自增运算符 前++是左值,返回引用 后++是右值,返回临时值 ++运算符的优先级比+高 Integer operator++(){} Integer operator++(int i){} int i 是用于区别前++和后++的,是没有实际意义的参数,称为哑元,必须是 int 类型 前++和后++的操作,主要区别就是返回的值不同,内部都是把变量加 1。 前++,(++i)先加后用,返回加 1 之后的变量值,可以把变量直接加 1,就返回,所有可以直接返回引用 后++,(i++)先用后加,返回加 1 之前的变量值,就是要返回原来的旧值, 这样需要在重载运算符的函数内部创建一个对象保存旧值,再进行加 1 运算, 返回这个旧值本身。 (2)重载= 实现用一个 int 类型给一个 Integer 对象赋值 Integer operator=(int i){ //赋值运算,把对象内的 int 值改变,返回本身即可,所以返回值是引用 *p = i; //手工将 int 类型的值赋到对象内 return *this; } 运算符重载 不仅可以用类的成员函数实现,也可以用普通函数实现 用成员函数实现, 参数只有一个, 运算符左边的是自身, 右边的是参数 a1.operator=(a2); 用普通函数实现,参数需要两个,第一个参数是运算符左边的值,第二个参数是运算符右边的值,作为友员函数重载 operator(a1,a2); 推荐原则 所有一元运算符 --- 成员重载 =,[]只能成员重载二元运算符 --- 友员重载 Integer 对象类型与 int 类型相加的时候, 实现 5+i 而且也能 i+5 可以用友员重载 2 次 friend Integer operator+(const Integer i , int a); friend Integer operator+(int a , const Integer i ); //在类中友员函数的 声明 强制类型转换运算符 operator int(){......} //强转成 int 类型的声明 3、流操作符的重载 输出流操作符只能使用友员方式重载 friend ostream operator (ostream o,Integer i); //声明友员函数ostream operator (ostream o ,Integer i){ //实现 o *(i.p) ; //输出对象内的*p,即指针指向的变量 return o; } cout i ; = operator(cout,i); 输入运算符也能重载,实现对象的读入,只能使用友员函数重载 friend istream operator (istream in,Integer i); //声明友员函数istream operator (istream in ,Integer i){ //实现 in *(i.p) ; //把读入的数据放到*p 指向的变量中 return in; } 为什么只能用友员重载? 因为 cin cout 的位置是固定的, cin i ; cout i ; 这样不能利用对象本身调用重载的流操作符 i.operator(cout) -这样是不正确 的 只能使用友员重载,把对象和 cout 都当做参数传进去,这样就能操作了 练习:账号类,直接输出账号 Account a1; cout a1 endl; friend ostream operator (ostream o,Account a); ostream operator (ostream o ,Account a){ Name : a.name endl; password : a.password endl; id : a.id endl; balance

文档评论(0)

hao187 + 关注
官方认证
内容提供者

该用户很懒,什么也没介绍

认证主体武汉豪锦宏商务信息咨询服务有限公司
IP属地上海
统一社会信用代码/组织机构代码
91420100MA4F3KHG8Q

1亿VIP精品文档

相关文档