论坛首页 编程语言技术论坛

读《Primer Plus C++》第十一章 使用类

浏览 2461 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-03-23   最后修改:2009-03-27
C++

读《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);

论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics