C++ 碎知识点

C++ 碎知识点

23. 不能被重载的运算符

  • ** sizeof **:sizeof 运算符
  • ** . **:成员运算符
  • ** .* **:成员指针运算符
  • ** :: **:作用域解析运算符
  • ** ? : **:条件运算符
  • ** typeid **:一个 RTT 运算符
  • ** const_cast **:强制类型转换运算符
  • ** dynamic_cast **:强制类型转换运算符
  • ** reinterpret_cast **:强制类型转换运算符
  • ** static_cast **:强制类型转换运算符

24. 重载限制

  • 重载后的运算符必须至少有一个操作数是用户定义的类型,这将防止用户为标准类型重载运算符。
  • 使用运算符时不能违反运算符原来的句法规则。同样,不能修改运算符的优先级和结合性。
  • 不能创造新的运算符。
  • 不能重载上面问题 23 中的那些运算符。
  • 大多数运算符都可以通过成员函数或非成员函数进行重载,但下面的运算符只能通过成员函数进行重载:
    • ** = **:赋值运算符
    • ** ( ) **:函数调用运算符
    • ** [ ] **:下标运算符
    • ** -> **:通过指针访问类成员的运算符

25. 如何重载前置++ 和后置++ 运算符?

C++中规定重载后置运算时需要添加一个整型参数进行标识。例如,下面的代码重载了++运算符,实现了前置运算和后置运算。

class CEnty
{
public:
    int count;
    CEnty operator++(int) //重载后置++运算符
    {
        CEnty enty = *this;
        this->count++;
        return enty;
    }
    CEnty operator++() //重载前置++运算符
    {
        this->count++;
        CEnty enty = *this;
        return enty;
    }
    CEnty() //默认构造函数
    {
        count = 1;
    }
};
int main(int argc, char* argv[])
{
    CEnty a;
    CEnty b = a++; //调用后置++运算符重载函数
    CEnty c = ++a; //调用前置++运算符重载函数
    return 0;
}

26. 重载 == 运算符实现两个对象的比较

请在 CArea 类中添加重载 == 运算符的代码,当两个对象的 Length 和 Height 数据成员完全相等时,则认为两个对象相等,否则认为不相等。

class CArea
{
public:
    int Length;
    int Height;
    CArea()
    {
        Length = 0;
        Height = 0;
    }
    CArea(int len, int height)
    {
        Length = len;
        Height = height;
    }
};

我们可以定义一个布尔类型的 == 运算符重载函数。
例如参考代码:

class CArea
{
public:
    int Length;
    int Height;
    CArea() //默认构造函数
    {
        Length = 0;
        Height = 0;
    }
    CArea(int len, int height) //自定义构造函数
    {
        Length = len;
        Height = height;
    }
    bool operator==(CArea &area) //运算符重载
    {
        if (area.Length = Length && area.Height==Height)
        {
            cout <<"两个对象相等!" << endl;
            return true;
        }
        else
        {
            cout <<"两个对象不相等!" << endl;
            return false;
        }
    }
};
int main(int argc, char* argv[])
{
    CArea area1(30, 25);
    CArea area2(20, 30);
    if (area1 == area2) //调用重载的==运算符
    {
        ;
    }
    return 0;
}

参考资料:
C++ Primer Plus (第6版)

你可能感兴趣的:(C++ 碎知识点)