C ++运算符重载方法

时间:2011-02-21 23:31:45

标签: c++ operator-overloading

我正在完成一些家庭作业,并且遇到如何形成我的方法签名以重载类成员的问题。

我的头文件

class MyInt
{
    int internalInt;
public:
    MyInt::MyInt(int i);
    const MyInt operator+(const MyInt& mi);
    const MyInt& operator++();
};

我的代码文件

MyInt::MyInt(int i)
{
    internalInt = i;
}

const MyInt MyInt::operator+(const MyInt& mi)
{
    cout << "Inside the operator+\n";
    mi.print(cout);
    return MyInt(internalInt + mi.internalInt);
}

const MyInt& MyInt::operator++()
{
    cout << "Inside the operator++\n";
    internalInt++;
    return this; //Line 42
}

当我尝试编译代码时,我收到的错误是

ex4.cpp:42: error: invalid initialization of reference of type ‘const MyInt&’ 
from expression of type ‘MyInt* const’

我在理解如何使其工作并尝试了一些方法签名时遇到了问题。在我的教科书中,他们正在填补所有重载,但我希望弄清楚我做错了什么,而不是仅仅使用流来获取我的代码进行编译。

谢谢!

2 个答案:

答案 0 :(得分:8)

尝试:

const MyInt& MyInt::operator++()
{
    cout << "Inside the operator++\n";
    internalInt++;
    return *this;
}

您正在返回此指针,而不是引用,您需要取消引用它。

答案 1 :(得分:2)

首先,在operator++()中,写下return *this;而不是return this;。同时删除const!

-

 const MyInt operator+(const MyInt& mi);

其次,将其设为const-function,如

 const MyInt MyInt::operator+(const MyInt& mi) const // <--- note this!

这是const-function。没有它,你将无法添加MyInt的const对象。

在最右边写const之后,你可以这样写:

const MyInt m1(10);
MyInt m2(20);
MyInt m3 = m1 + m2 ; //m1 is const, so it can call ONLY const-function