zoukankan      html  css  js  c++  java
  • C++ 中重载运算符 “<” 及 friend属性

    类中重载运算符不需要一定是成员函数,也可以声明为友元函数。

     
    class person
    
    {
    
    public:
    
    //作为类的成员函数,重载运算符参数只需要右操作值即可
        bool operator<(const Person& arg);
    
    private:
    
       int a;
    
    };
    
    //实现时需要类名限定
    
     bool person::operator<(const Person& arg)
    {
        if( (this->a) < arg.a)
           return true;
        else
            return false;
    
    }
    
    
    
    person a1,a2;
    
    bool bRet = a1 < a2 ; 正确
    
    

    class person

    {

    public:

    //作为类的成员函数,重载运算符参数只需要右操作值即可


       friend bool operator<(const Person& arg1, const Person& arg2);

    private:

       int a;

    };

    //实现时不需要类名限定

     bool operator<(const Person& arg1, const Person& arg2)
    {
        if( arg1.a < arg2.a)
           return true;
        else
            return false;

    }

    
    person a1,a2;

    bool bRet = a1 < a2 ; 正确

    在这个例子1中,运算符重载函数作为类的成员函数,使用该类的对象时可以调用内部的私有保护成员。

    在例子2中,运算符重载函数虽然不是类的成员函数,但是被声明为类的友元函数,同样可以调用类内部的私有保护成员。

    但是将重载函数声明为保护或者私有函数,使用该类的对象时将无法对重载函数进行调用,也就是 如果你把重载函数写成成员函数或者友元函数,而且是public属性,对于使用该操作符时其实没有差别,但是如果是保护或者私有,那么在外部你就不能使用该操作符了:

    class person
    
    {
    
    protect:
    
    //作为类的成员函数,重载运算符参数只需要右操作值即可
        bool operator<(const Person& arg);
    
    private:
    
       int a;
    
    };
    
    //实现时需要类名限定
    
     bool person::operator<(const Person& arg)
    {
        if( (this->a) < arg.a)
           return true;
        else
            return false;
    
    }
    
    
    
    person a1,a2;
    
    bool bRet = a1 < a2 ; 错误
    class person
    
    {
    
    protect:
    
    //作为类的成员函数,重载运算符参数只需要右操作值即可
    
    
       friend bool operator<(const Person& arg1, const Person& arg2);
    
    private:
    
       int a;
    
    };
    
    //实现时不需要类名限定
    
     bool operator<(const Person& arg1, const Person& arg2)
    {
        if( arg1.a < arg2.a)
           return true;
        else
            return false;
    
    }
    
    person a1,a2;
    
    bool bRet = a1 < a2 ; 错误
  • 相关阅读:
    Something I know about WebDynpro
    Details about support package implementation
    CRM Middleware Performance Topics
    Way to configure the logon navigaion layouts via Business Roles in CRM
    DOM 常用节点类型和方法
    第一届 xdef 会议日程
    去除百度音乐盒广告的chrome插件 持续更新
    从人人网抓取高校数据信息,包括,省份 高校 院系 (提供最终SQL文件下载)
    PHP 与 JSON
    解决HTTPS 发送请求走socket问题
  • 原文地址:https://www.cnblogs.com/yangxx-1990/p/8480920.html
Copyright © 2011-2022 走看看