strong_fee 发表于 2013-1-28 19:34:14

读《Primer Plus 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);
页: [1]
查看完整版本: 读《Primer Plus C++》第十一章 使用类