读《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<<&hellip;;
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]