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

    #include <iostream>
    using namespace std;
    class num
    {
    public:
        num(){n = 1;}
        ~num(){}
        int get()const{return n;}
        void set(int i){n = i;}
        void operator++(){++n;}
    private:
        int n;
    };
    int main()
    {
        num i;
        cout << "i:" << i.get() << endl;
        ++i;//注意这里仅仅是对i变量进行操作让i成员改变了,但是它是没有返回值的,
        //++i实际上是调用了operator函数,但是operator函数是void类型,所以不能把++i赋给另一个对象
        cout << "i:" << i.get() << endl;
    }

     我们知道,不能把++i赋给另一个新建的对象,因为++i调用的是operator函数,这个函数的返回值是void类型的,但是我们把operator的类型改为num类型的并返回一个对象的时候,就能把++i赋给另一个对象了

    #include <iostream>
    using namespace std;
    class num
    {
    public:
        num(){n = 1;}
        ~num(){}
        int get()const{return n;}
        void set(int i){n = i;}
        num operator++(){++n; num t; t.set(n); return t;}
        //这样返回一个对象的时候需要另外创建一个对象,仍然不太好,我们可以定义一个带参数的构造函数,比如num(int i){n = i;} ,然后在这个函数里return num(n)即可
    private: int n; }; int main() { num i; cout << "i:" << i.get() << endl; ++i; cout << "i:" << i.get() << endl; num j = ++i; cout << "i:" << i.get() << endl; cout << "j:" << j.get() << endl; return 0; }

     还可以优化代码减少构造函数和复制构造函数的调用,节省时间

    #include <iostream>
    using namespace std;
    class A
    {
    public:
        void set(int n){i = n;}
        A(){cout << "构造" << endl;}
        A(A&s){i = s.i; cout << "复制" << endl;}
        ~A(){cout << "析构" << endl;}
    
        int get(){return i;}
        void add() {i++;}
        A& operator++(){++i;return *this;}
    private:
        int i;
    };
    int main()
    {
        A a;
        a.set(5);
        cout << a.get() << endl;
        a.add();
        cout << a.get() << endl;
        A &n = ++a;
        cout << n.get() << endl;
        return 0;
    }
  • 相关阅读:
    2019春季学期第四周作业
    2019年春季学期第三周作业+预习作业
    2019第一周作业2
    2019第一周作业1
    寒假作业3(抓老鼠啊~亏了还是赚了?)
    nginx负载均衡
    性能优化建议
    数据库主从配置
    php魔术方法
    图片轮播
  • 原文地址:https://www.cnblogs.com/rain-1/p/4883386.html
Copyright © 2011-2022 走看看