• 运算符的重载


    #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;
    }
  • 相关阅读:
    MoveWindow() SetWindowPos()的区别与联系
    SEO搜索引擎优化基础
    Windows核心编程小结1
    STL学习笔记8 -- 函数对象
    Java关于反射
    多线程处理慢sql查询小笔记~
    前端小菜鸡使用Vue+Element笔记(二)
    前端小菜鸡使用Vue+Element笔记(一)
    Hive/hbase/sqoop的基本使用教程~
    Hive/Hbase/Sqoop的安装教程
  • 原文地址:https://www.cnblogs.com/rain-1/p/4883386.html
Copyright © 2020-2023  润新知