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

刘邓

每天收获一点点-目标:富足

 
 
 

日志

 
 

C++细节(5)  

2012-04-28 10:04:35|  分类: C++编程思想(卷 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
一.const的使用
1.在引用调用时将引用参数设置为常长参数即以const修饰:T Fun(const T &t1,T &t2)在这个函数体内,形参t1以及形参t1的引用的值都无法被改变,而t2的值可以改变,并且传递引用的实参值也将被改变。
2.const加在类成员函数后面如 void Class::m_Fun() const{} 则保证调用此函数的对象不能被此函数改变
3const修饰函数返回值,表示修饰的返回值不可悲改变。对于自定义类的对象作为返回值时,一般情况都加const修饰,这样能防止一些不必要的麻烦。const ClassName Fun();则返回的不可悲改变。

二.构造函数的返回值
在正常情况下认为构造函数无返回值,然而如果在现实调用构造函数时实际上是产生一个无名的对象,所以也可以认为此无名对象时构造函数的返回值

三.不同的重载方式
1.类外重载(普通函数) 二元运算符有两个传引用的参数 注:若要获取或者改变类私有成员的值需要调用对象的取值和赋值函数
2.类成员函数重载 二元运算符有一个参数,调用对象相当于普通重载的第一个参数.
3.友元方式重载。这种方法支持构造函数的自动类型转换,如anObject + 5如果类有以整型变量为参数的构造函数,则系统将自动的把5转换为以5为船员变量的一个无名对象来和anObject进行运算。
注:推荐使用友元方式,更符合我们的习惯,且支持构造函数的自动类型转换。
注:“.”(点操作符),作用域说明符(::),sieof,三元操作符(?:)不可以被重载。
“&&”,“||”以及逗号操作符应该尽量避免重载
四.类可以访问其所有对象
比如在一个类中的成员函数,一个对象Object1要调用另外的类对象Object2进行操作,则此函数可以直接读取和改变Object2的私有成员变量。上面的类成员函数重载方式就是最好的例子。

五.重载函数调用符()
Object(42)  = = Object.()(42);//其中42为参数,第一个()为“函数名”。
重载了函数调用符()的对象又称为函数对象,在STL中函数对象起到粘合算法和容器的作业。

六.返回应用的函数
T & Fun();此函数返回的是T类型参数的引用。这种特殊的返回形式允许把函数表达式(返回值)作为左值(l-value)使用。所谓左值就是可以作为表达式左边的值。

七.输入输出操作符“<<”,">>"的本质
<<输出操作符是一个特殊的二元操作符。
如我们平时使用的操作 cout<<a;则此表达式中 cout是<<的第一个参数,a是<<的第二个参数。
cout实际上是类ostream的对象。把握了<<的本质,那么重载起来就简单多了。
返回值为ostream(因为可能要连续输出,所以返回值要可以作为左值,故必须返回引用) 实际为ostream & operator << (ostream &out,const Class &Object)
>>输入操作符的原理同上
istream & operator >>(istream &in,const Class &Object);

八.重载++,--运算符
前置版本的重载++,--和普通重载没区别。
const Class operator ++ ();//这个可以return *this
后置版本的重载++,--要在函数参数中加入一个仅仅用来标记的int
const Class operator ++(int)//此为后置版本
--的原理同上。
  评论这张
 
阅读(45)| 评论(2)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

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

页脚

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