zoukankan      html  css  js  c++  java
  • C++ 运算符重载

    一元运算符重载

    一元运算符通常出现在它们所操作的对象的左边,但有时它们也可以作为后缀。

    重载自增运算符

    Test& operator ++ () {
        ++a;
        return *this;
    }
    
    Test operator ++ (int) {
        Test ret(a);
        a++;
        return ret;
    }
    

    在前置++中,我们返回的是引用。而在后置++中,我们创建临时变量,返回操作前的值。参数列表中包含的 int 没有实际作用。

    重载[]运算符

    class Arr {
        int a[256];
    public:
        int& operator[] (int i) {
            return a[i%256];
        }
    };
    
    int main() {
        Arr a;
        a[256]=1;
        cout<<a[0];
    }
    

    二元运算符重载

    最常见的应用场景就是加减乘除了。比如我们要实现向量的加法。通常我们在传参时,都会使用常量引用来提高效率并保证安全。

    注意,类私有成员可以被类成员函数访问,不区分成员在哪个实例里。因此以下例子是合法的

    class Point {
        int x,y;
    public:
        Point(int x,int y): x(x),y(y) {};
        Point operator + (const Point& b) {
            return Point(x+b.x,y+b.y);
        }
        void print() {
            cout<<x<<","<<y<<endl;
        }
    };
    
    int main() {
        Point a(1,1),b(2,3);
        (a+b).print();
    }
    

    输入输出流运算符重载

    输入输出的重载本是可以通过成员函数完成的,但这样无法将 cout 作为左操作数,为了符合习惯,我们使用友元函数来完成这个重载过程。

    class Point {
        int x,y;
    public:
        Point(int x,int y): x(x),y(y) {};
        friend ostream& operator<<(ostream &os,const Point &p) {
            os<<p.x<<","<<p.y;
            return os;
        }
    };
    
    int main() {
        Point a(1,1);
        cout<<a;
    }
    

    输入重载同理,不做赘述。

  • 相关阅读:
    ArcGIS Pro获得一个要素图层一种方法
    ArcGIS Pro layout clone
    ActiveMapViewChanged和选择变化
    ArcGIS Pro 改变栅格的数据源
    ArcGIS Pro自定义图标
    Windows Server 2016 路由和远程访问
    IIS应用程序池_缓存回收
    asp.net RSA密钥之C#格式与Java格式转换(PEM格式)
    MD5和Hash
    C# list与数组的转换
  • 原文地址:https://www.cnblogs.com/mollnn/p/12599038.html
Copyright © 2011-2022 走看看