C++ 是否可以使用'添加同一类的两个对象+';操作人员
我的教科书说我们可以添加同一类的两个对象。 V3=V2+V1//都属于同一类 <>但是在Turbo C++中测试时,我得到了错误:非法的结构操作指向同一行,v3= v1+v2..p/>C++ 是否可以使用'添加同一类的两个对象+';操作人员,c++,class,C++,Class,我的教科书说我们可以添加同一类的两个对象。 V3=V2+V1//都属于同一类 但是在Turbo C++中测试时,我得到了错误:非法的结构操作指向同一行,v3= v1+v2..p/> 所以我的问题是,是否可以使用+运算符添加同一类的两个对象,如果答案是肯定的,那么为什么会收到错误消息?是的,当然可以添加同一类的两个对象,但在添加之前,必须先执行运算符重载,通过定义“+”运算符以及在对象之间简单放置“+”运算符时对象将如何添加。 您不仅可以添加,还可以实现任何运算符,如“-”、“*”、“/”,但首先
所以我的问题是,是否可以使用+运算符添加同一类的两个对象,如果答案是肯定的,那么为什么会收到错误消息?是的,当然可以添加同一类的两个对象,但在添加之前,必须先执行运算符重载,通过定义“+”运算符以及在对象之间简单放置“+”运算符时对象将如何添加。 您不仅可以添加,还可以实现任何运算符,如“-”、“*”、“/”,但首先必须重载它们 下面是运算符重载的一个示例
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;
}
class分
{
私人:
国际货币基金组织;
公众:
分(整数分){m_nCents=nCents;}
//加分
友元美分运算符+(常量美分和c1、常量美分和c2);
int GetCents(){return m\u nCents;}
};
//注意:此函数不是成员函数!
美分运算符+(常量美分和c1、常量美分和c2)
{
//使用构造函数和运算符+(int,int)
返回美分(c1.m金额+c2.m金额);
}
int main()
{
第1(6)条;
第2(8)条;
分cCentsSum=cCents1+cCents2;
std::cout您的类必须重载了+
运算符。没有它,编译器将不知道如何“添加”给定的两个类。通过添加运算符重载函数定义+
运算符的工作方式
下面是类“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);
}
可以查看有关运算符重载的更完整参考。您不仅可以添加两种用户定义的数据类型,还可以使用运算符重载执行各种操作
运算符重载的一般语法如下所示:
如果要添加两个对象,例如:
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
}
这将返回对其执行特定操作的对象
< > > >代码>操作符< /C>是C++中的关键字,如果操作符重载,不改变其意义是一般的伦理学。如果操作符是一元,它仍然是一元的,如果操作符是二进制的,则它是二进制的,需要一个和两个操作数。
类似地,像*,>,#这样的运算符包括
使用名称空间std;
/*班级人数
{私人:
int n;
公众:
计数()
{
n=0;}
无效显示()
{CouuYe可以做到,如果类重载<代码> +//>代码>操作符。你需要的是操作符重载:为了达到你的答案,想想这个:你期望做什么?……并且删除Turbo C++,就像在一个公路上骑一辆马车一样,你在范围解析操作符(第一行)中缺少了一个::@gnometorule-Oops,已修复。重载成员运算符+=
,而不使用朋友
,会简单得多。虽然这可能会回答问题,但最好对您提供的解决方案进行简要说明,这样可能会使OP和未来的读者受益。
#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();
}