我有这个类的定义:

class foo{

public:
    foo();
    foo(const int& var);
    foo(const foo& var);
    ~foo();

    const foo operator +(const foo& secondOp) const;

private:
    int a;
    //plus other values, pointers, e.t.c.

};

我也为“+”运算符重载做了这个实现:
const foo foo::operator +(const foo& secondOp) const{

    //I want here to check if i have one operand or two...
    if ((FIRST_OPERAND.a!=0) && (secondOp.a==0)){
        cout << "ERROR, second operand is zero";
        return FIRST_OPERAND;
    }
    else if ((FIRST_OPERAND.a==0) && (secondOp.a!=0)){
        cout << "ERROR, first operand is zero";
        return secondOp;
    }

}

当我用main()编写时:
foo a(2);
foo b;
foo c;

//I want here to print the ERROR and
//return only the values of a
c = a + b;
  • 如果第二个操作数为零,我可以对第一个操作数的值进行return吗?反之亦然?
  • 最佳答案

    你快到了。由于它是成员函数,因此第一个操作数是*this,因此请用FIRST_OPERAND.athis->a替换a

    但是,最好将其设为非成员函数,以允许在两个操作数上进行转换(即能够写a + 22 + a)。要成为私有(private)成员(member),需要成为 friend 。

    friend foo operator +(const foo& firstOp, const foo& secondOp);
    

    另外,最好不要返回const值,因为这会阻止从返回值中移出。

    关于c++ - 如果在C++中+运算符重载的第二个操作数为零,如何返回第一个操作数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21439336/

    10-10 21:28