我的教科书说我们可以添加两个相同类的对象。 V3 = V2 + V1 //所有属于同一类。
但是当我在Turbo c ++中测试时,我得到错误:指向同一行的非法结构操作,V3 = V1 + V2。
所以我的问题是,是否可以使用+运算符添加两个相同类的对象,如果答案是肯定的,那么为什么我会收到错误消息?
答案 0 :(得分:5)
您的班级必须重载+
运算符。没有它,编译器就不会知道如何添加"给出了两个班级。通过添加运算符重载函数来定义+
运算符的工作方式。
以下是一个类' V':
的示例V V::operator+(const V& other){
//Define how should the classes be added here
//Example addition of private fields within V
int field1 = this.field1 + other.field1;
//Return the 'added' object as a new instance of class V
return V(field1);
}
可以查看有关运算符重载的更完整参考here。
答案 1 :(得分:1)
是的,当然你可以添加两个相同类的对象但在此之前你必须通过定义'+'运算符以及当你简单地在'+'运算符之间添加对象时如何进行运算符重载物体。 你不仅可以添加,你可以实现任何运算符,如' - ','*','/',但首先你必须重载它们。
这是一个运算符重载的例子
class Cents
{
private:
int m_nCents;
public:
Cents(int nCents) { m_nCents = nCents; }
// Add Cents + Cents
friend Cents operator+(const Cents &c1, const Cents &c2);
int GetCents() { return m_nCents; }
};
// note: this function is not a member function!
Cents operator+(const Cents &c1, const Cents &c2)
{
// use the Cents constructor and operator+(int, int)
return Cents(c1.m_nCents + c2.m_nCents);
}
int main()
{
Cents cCents1(6);
Cents cCents2(8);
Cents cCentsSum = cCents1 + cCents2;
std::cout << "I have " << cCentsSum .GetCents() << " cents." << std::endl;
return 0;
}
答案 2 :(得分:0)
您不仅可以添加两个用户定义的数据类型,还可以使用operator overloading
执行各种操作。
运算符重载的一般语法如下:
如果要添加两个对象,例如:
eg: objres=obj1+obj2;//belong to class s
操作obj1+obj2
应返回具有相同用户定义数据类型的对象。
因此,重载函数的返回类型应为s
。
s operator+(s obj)
{
s temp;
temp.datamember=datamember+obj.datamember;//perform operation on datamembers
return temp;//return object to objres
}
这将返回一个对象,并对其执行特定操作。
应该注意的是operator
是C ++中的关键字,如果运算符过载则不改变含义,这是一般道德规范。如果运算符是一元的,它仍然是一元的,如果是运算符是二进制的,它仍然是二进制的,分别需要一个和两个操作数。
同样,像*,>,<,==,/,++,--
这样的运算符也可以重载。
答案 3 :(得分:0)
#include<iostream>
using namespace std;
/*class count
{private:
int n;
public:
count()
{
n=0; }
void show()
{cout<<n<<endl;
}
void operator ++()
{count temp;
n=n+1;
temp.n=n;
return temp;
}
void operator ++(int)
{count temp;
n=n+1;
temp.n=n;
return temp;
}
};
int main()
{
count a,b;
a.show();
++a;
a++;
a.show();
}*/
class add
{
private :
int a,b;
public:
void get()
{cout<<"enter a";
cin>>a;
// cout<<"enter b";
// cin>>b;
}
void show()
{
cout<<"sum of a"<<a<<endl;
}
add operator +(add x)
{
// add y;
y.a=x.a+a;
// return y;
}
};
int main()
{
add obj1,obj2,obj3;
obj1.get();
obj2.get();
obj3=obj1+obj2;
obj3.show();
}