《C++ Primer Plus》第11章学习笔记

2021-06-17  本文已影响0人  蓬篙人

内容思维导图

第11章 使用类

1. 操作符重载

// op表示要重载的操作符,如operator +()
operator op(argument-list)
op必须是有效的C++操作符,不能虚构一个新的符号。

2. 友元简介

friend Time operator*(double m, const Time & t) const;
1. operator*()函数是在类中声明,但它不是成员函数,不能用成员操作符来调用。
2. operator*()不是成员函数,但与成员函数的访问权限相同。
3. 函数定义不需要使用`friend`关键字,而且不是成员函数也不需要使用限定符`Time::`。
ostream& operator<<(ostream& os, className& obj)
{
    os << ...;  // 显示对象
    return os;
}

3. 操作符重载:作为成员函数还是非成员函数

//---------声明:其中Time为一个类
// 成员函数版本
Time operator+(const Time& t) const;
// 友元函数版本
friend Time operator+(const Time& t1, const Time& t2);

//----------使用:其中T1, T2和T3都是Time对象
T1 = T2 + T3;
// 成员函数版本实际调用形式
T1 = T2.operator+(T3);
// 友元函数实际调用形式
T1 = operator+(T2, T3);

4. 类的自动转换和强制类型转换

// 构造函数
Stonewt(double lbs);
// 则可以使用double赋值
Stonewt myCat;
myCat = 19.6;    // C++使用19.6创建Stonewt临时对象然后赋值到myCat中。
explicit Stonewt(double lbs);  

Stonewt myCat;
myCat = 19.6;     // 不允许
myCat = Stonewt(19.6);   // 可以
myCat = (Stonewt)19.6;   // 可以
// 转换函数的形式
operator TypeName();
// 示例
class Cat
{
    ...
public:
    // 转换函数
    operator int() const;
    operator double() const;
}
1. 转换函数必须是类方法。
2. 转换函数不能指定返回类型。
3. 转换函数不能有参数。
上一篇 下一篇

猜你喜欢

热点阅读