注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

蒙奇D小豌豆的博客

蒙奇D小豌豆的学习记录

 
 
 

日志

 
 

C++学习三之复制与重载  

2013-01-31 21:06:16|  分类: language |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
复制控制
1 合成复制构造(操作)函数:没有复制构造(操作)函数系统将合成,有复制构造函数后就不会生产,以及插入任何未复制成员的代码。编译器将现有对象的每个非static成员,一次复制到正创建对象。他能完成类类型和内置成员复制(除指针外)

2 复制构造函数的形参通常是一个const引用

3 禁止复制构造函数,把复制构造函数申明为private,只申明不定义。

4 三法则,当类需要析构函数的时候,那么它必然也需要复制构造函数,和复制控制函数

5 系统总是合成一个析构函数,他按照声明中逆序撤销成员,不过对指针不能产生作用


重载与转换
1 重载操作符后优先级,结核性保持不变。但是不再具备短路性,所以重载&&,||,逗号不是个好办法,重载&也不是一个好方法

2 一般算数和关系运算符,<<,>>(必须 才能使用cou>>),为非成员函数(友元),而将赋值运算符,下标[],指针->,调用(),解引用*,自加,自减定义为成员函数

3 作为类成员的重载函数,其形参看似比操作数少一,作为类成员的操作符隐含了一个this形参。

4 <<,>>输出输入操作符重载,第一个参数应为ostream&, 第二个为类的对象引用,返回ostreams&,在输出重载函数中最好不要又换行符。

5 注意,为了与内置操作符保持一致,加号重载符返回一个右值,而不是引用

6 关系操作符中常常 == 和 < 非常有用

7 赋值操作符必须为成员函数,而且必须返回(*this)引用

8 解引用*和下标[]重载符都为成员函数,都需要const和非const版本,以免基础类对象被改变

9 注意重载-> 他只是一个表达式,不是一个计算试,它必须返回指向类型的指针,或者定义了肩头操作的类的类对象类型
point->action()

a  如果point是个指针,那么志向成员名为ation的 对象:调用对象的ation成员。

b  如果point是个类,实现了operator->()操作,就理解为point.operator->()->action;

c  否则报错

10 定义前缀++和后缀++ ,前operator++(), 后operator++(int);

11 调用操作符(), 将类转换为函数 xxx operator()(xxx...)。例子:P450

12 转换操作符 operator type(), 必须为成员函数,常常为const成员函数。类类型转换之后不能再跟另外一个类转换(不能多次迭代转换)

13 转换有两种 1)单参数构造函数的参数类型向类类型转化。 2)operator type()显示转换。如果上述2个产生同样的转换就会引起二义性。
SmallInt(int i = 0):val(i)//covert int to SmallInt
{
if(i < 0 || i >255)
{
cout<<"WARING!!!!,the i is not 0<i<255,we chage it to 0"<<endl;
val = 0;
}
cout<<"in the SmallInt int"<<endl;
}
SmallInt(double i = 0):val(i)//covert double to SmallInt
{
if(i < 0 || i >255)
{
cout<<"WARING!!!!,the double i is not 0<i<255,we chage it to 0"<<endl;
val = 0;
}
cout<<"in the SmallInt double"<<endl;
}
operator int() const //convert SmallInt to int
{
cout<<"in the operator i nt() "<<endl;
return val;
}
operator double() const //convert SmallInt to double  ,define more operator() is not good, you qi yi
{
cout<<"in the operator double() "<<endl;
return val;
}   
  评论这张
 
阅读(175)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018