精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-03-23
最后修改:2009-03-27
读《Primer Plus C++》第十一章 使用类
一 重载 1. 不要返回指向局部变量或临时对象的引用。因为函数执行完后,局部变量或临时对象将消失,饮用将指向不存在的数据。 2. 操作符重载的形式为:Time operator+ (const Time & t) const; 3. 调用操作符重载的方法有两种: a) 函数表示法:Time coding; coding.operator+(t); b) 操作数表示法:coding+t; 4. 重载限制 a) 重载后的操作符必须至少有一个操作符是用户定义的类型。 b) 不能违反操作符原来的句法规则,如不能将二元操作符重载为一元操作符。 c) 不能定义新的操作符和一些特殊的操作符如(sizeof , . , .* , :: ,?:,强制类型转换操作符)。 d) 有些操作符只能通过成员函数进行重载,如(=,(),[],->) 5. 操作符的左侧是调用对象
二 友元(非成员函数,访问权限与成员函数相同) 1. 声明的形式:friend Time operator* (double m, const Time & t); 友元函数的定义形式:Time operator*(double m, const Time & t){…}; 2. 如果要为类重载操作符,并将非类的项作为其第一个参数,则可以用友元函数来反转操作数的顺序。还有一种解决操作数反转的办法是如: Time operator*(double m, const Time &t){return t*m} 3. <<的重载 osream & operator<<(ostream &os,const c_name & obj){ os<<…; return os; } 三 类的自动类型转换和强制类型转化 只接受一个参数的构造函数定义了从参数类型到类类型的转换。如果使用关键字explicit(关闭自动特性),则Stonewt(double)将只用于显示强制类型转换,否则还可以用于下面的隐式转换: a) 将Stonewt对象初始化为double值时。 b) 将double值赋值给Stonewt参数的函数时。 c) 返回值被申明为Stonewt的函数试图返回一个double值时 d) 将double值传递给接受Stonewt参数的函数时 e) 在上述任意一种情况下,使用可转换为double类型的内置对象时。 对于e,当且仅当转换不存在二义性时,才会自动进行而不转换。 explict Stonewt(double lbs); 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
浏览 2467 次