我想知道如何为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;
}
};
答案 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;
}
这能解决你的问题吗?我希望这会有所帮助。