C++ 是否可以使用'添加同一类的两个对象+';操作人员

C++ 是否可以使用'添加同一类的两个对象+';操作人员,c++,class,C++,Class,我的教科书说我们可以添加同一类的两个对象。 V3=V2+V1//都属于同一类 但是在Turbo C++中测试时,我得到了错误:非法的结构操作指向同一行,v3= v1+v2..p/> 所以我的问题是,是否可以使用+运算符添加同一类的两个对象,如果答案是肯定的,那么为什么会收到错误消息?是的,当然可以添加同一类的两个对象,但在添加之前,必须先执行运算符重载,通过定义“+”运算符以及在对象之间简单放置“+”运算符时对象将如何添加。 您不仅可以添加,还可以实现任何运算符,如“-”、“*”、“/”,但首先

我的教科书说我们可以添加同一类的两个对象。 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();
}