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;
    }
    

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

  • 相关阅读:
    (SenchaTouch+PhoneGap)开发笔记(2)开发环境搭建二
    Sql语句复习
    冒泡排序
    微信开发订阅号(ASP.NET MVC4+jquery mobile+AppHarbor发布)
    Ext4 ComboBox组件使用
    ExtJs 进度条(轮询)
    如何替换掉.net toolStrip控件溢出按钮背景图
    easyui-menu 宽度自适应
    Python之入门学习
    servlet和filter的区别
  • 原文地址:https://www.cnblogs.com/mollnn/p/12599038.html
Copyright © 2011-2022 走看看