美文网首页
C++ 碎知识点

C++ 碎知识点

作者: MinoyJet | 来源:发表于2017-04-13 21:21 被阅读0次

    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++ 碎知识点

          本文链接:https://www.haomeiwen.com/subject/hchiattx.html