是否可以使用' +'添加两个相同类的对象。操作者

时间:2014-05-18 05:27:20

标签: c++ class

我的教科书说我们可以添加两个相同类的对象。 V3 = V2 + V1 //所有属于同一类。

但是当我在Turbo c ++中测试时,我得到错误:指向同一行的非法结构操作,V3 = V1 + V2。

所以我的问题是,是否可以使用+运算符添加两个相同类的对象,如果答案是肯定的,那么为什么我会收到错误消息?

4 个答案:

答案 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();
}