运算符的重载

#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;
}
原文地址:https://www.cnblogs.com/rain-1/p/4883386.html