C ++重载+运算符只有成员函数,用于添加带有整数的类对象

时间:2014-08-19 11:24:29

标签: c++ operator-overloading member-functions

我想知道如何为operator+中的以下语句撰写operator= 成员函数和main成员。

我不想添加好友功能。

int main(){
  A obj1, obj2, obj3;

  obj2 = obj1 + 10;

  obj3 = 20 + obj1;

  return 0;

}

//Below is my class

//Please add necessary assignment and additions operator+ functions

class A{

   int i;

 public :

      A(){i = 0;}

     A& operator=(const A &obj){

        i = obj.i;
        return *this;
    }
};

5 个答案:

答案 0 :(得分:1)

你说你不想使用朋友功能,但很难,这是正确的方法。您不需要自定义赋值运算符。隐式构造函数会自动将整数转换为A的实例。这将与main中的代码一起使用。

class A
{
public :
    A(int i = 0) : i(i) {}

    friend A operator + (const A& left, const A& right)
    {
        return A(left.i + right.i);
    }

private:
    int i;
};

答案 1 :(得分:1)

obj = obj1 + 10;可以使用以下定义的运算符解决:

A operator+( int rhs ){
  return A( i + rhs );
}

反过来是一个问题,因为int是非类型。 IMO你没有朋友操作员就无法解决这个问题,因为成员操作员暗示左手系统是类型,你需要重载。

Here是对类似问题的非常好答案的链接

答案 2 :(得分:0)

略有不同的解决方案:

class A
{
public :
    A(int i = 0) : i(i) {}

    A operator+(int addition)
    {
        return A(i + addition);
    }

private:
    int i;
};

A operator+(int addition, const A& a)
{
    return a + addition;
}

答案 3 :(得分:0)

Operator =将按照您在代码段中编写的方式工作。另外,成员函数不起作用,另一种选择是......

//Define following members functions and attributes in class
class A
{
private:
  int i;

public:
  //1) implicit constructor for conversion from int
  A (int i_ = 0) : i (i_) {}

  //2) public function for addition
  A Add (A const& copy)
  { return A (i + copy.i); }
};

//You can call A::Add from global operator+ function without it being friend
A operator+ (A const& left, A const& right)
{ return left.Add (right); }

答案 4 :(得分:0)

#include<iostream>
using namespace std;

class A{

     int i;

 public :

     A(){i = 0;}
     A& operator=(int obj){

        i = obj;
        return *this;
    }
    int operator+(){
        return this->i;
    }
    int operator-(){
        return -1*this->i;
    }
    A operator+(int a){
        this->i=a+this->i;
        return *this;
    }
};


int main(){
  A obj1, obj2, obj3;

  obj2 = obj1 + 10;

  obj3 = 20 + +obj1;

  return 0;

}

这能解决你的问题吗?我希望这会有所帮助。