zoukankan      html  css  js  c++  java
  • 重载操作符

    C++语法规定可以重载操作符,例如*和->。下面是一个例子:

    class Screen{
    public:
        Screen(int x, int y)
        {
            m_x = x;
            m_y = y;
        }
        int m_x;
        int m_y;
    };
    
    template<class TYPE>
    class ThreadLocal{
    public:
        ThreadLocal(TYPE &s)
        {
            ptr = &s;
        }
    
        TYPE& operator*() {    return *ptr; }
        TYPE* operator->() { return ptr; }
    
    private:
        TYPE *ptr;
    };
    
    int main(int argc, char* argv[])
    {
        Screen s1(100, 60);
        ThreadLocal<Screen> ps(s1);
        printf("%d, %d
    %d, %d
    ", (*ps).m_x, (*ps).m_y, ps->m_x, ps->m_y);
    
        return 0;
    }

    重载操作符很容易与转换函数混淆,例如下面的例子:

    class Screen{
    public:
        Screen(int x, int y)
        {
            m_x = x;
            m_y = y;
        }
        int m_x;
        int m_y;
    };
    
    template<class TYPE>
    class ThreadLocal{
    public:
        ThreadLocal(TYPE &s)
        {
            ptr = &s;
        }
    
        operator TYPE*() { return ptr; }
        TYPE* operator->() { return ptr; }
    
    private:
        TYPE *ptr;
    };
    
    int main(int argc, char* argv[])
    {
        Screen s1(100, 60);
        ThreadLocal<Screen> ps(s1);
        printf("%d, %d
    %d, %d
    ", (*ps).m_x, (*ps).m_y, ps->m_x, ps->m_y);
    
        return 0;
    }
  • 相关阅读:
    linux中apt-get使用
    部署ceph
    cinder存储服务
    ceph简介
    Horizon Web管理界面
    neutron网络服务2
    neutron网络服务
    nova计算服务
    cinder存储服务
    keystone身份认证服务
  • 原文地址:https://www.cnblogs.com/licb/p/operator.html
Copyright © 2011-2022 走看看