c++类运算符重载碰到的函数形参题目

    添加时间:2013-7-22 点击量:

    class A
    
    {
    public:
    A(int arg1, int arg2);
    ~A();
    A &operator = ( A &other);
    A operator + ( A &other);
    private:
    int a, b;

    };


    A::A(int arg1, int arg2)
    {
    a = arg1;
    b = arg2;
    }

    A::~A()
    {

    }
    A &A::operator=( A &other)
    {
    if (this == &other)
    {
    return this;
    }

    this->a = other.a;
    this->b = other.b;
    return this;
    }

    A A::operator+( A &other)
    {
    return A(a+other.a, b+other.b);
    // return other;
    }


    上方的这个类中重载了=和+号运算符, 然则参数都是引用,而不是const的引用,如许在碰到形如


    A a(1, 2);


    a + A(3, 4);


    的运算时就会呈现错误,原因如下:


    a + A(3, 4)等价于a.operator +(A(3, 4))


    这里要提到的是函数的返回值不克不及作为左值(可以拜见http://blog.csdn.net/sunshinewave/article/details/7830701)


    然则类中的函数声明白是


    A operator + ( A &other)


    申明other在函数中是可以批改的,这就产生了抵触,所以编译器会提示无法把A类型的变量转换成A&的错误提示


    总结:在类中重载运算符时要把形参默示为const A&的情势,不仅为了削减开销


     

    读书,不要想着实用,更不要有功利心。读书只为了自身的修养。邂逅一本好书如同邂逅一位知己,邂逅一个完美之人。有时心生敬意,有时怦然心动。仿佛你心底埋藏多年的话,作者替你说了出来,你们在时光深处倾心相遇的一瞬间,情投意合,心旷神怡。
    分享到: