Вопрос

Я знаю, что вы можете сделать два объекта равными друг другу, когда один из них объявлен. Я проверил это в моей программе. но когда я пошел использовать оператор присваивания, он взбесился. Можете ли вы сделать два объекта равными друг другу с помощью оператора присваивания или вы можете сделать это только тогда, когда один объект объявлен?

Это было полезно?

Решение

Вы предоставили operator = классу, чтобы скопировать содержимое другого объекта. Например:

class A
{
  public:

   //Default constructor
   A();

   //Copy constructor
   A(const A&);

   //Assignment operator
    A& operator=(const A& a);
};

int main()
{
  A a; //Invokes default constructor
  A b(a); //Invokes copy constructor;
  A c;
  c = a; //Invokes assignment operator
}

Другие советы

Может помочь перегрузка оператора присваивания для этого объекта. (Надеюсь, вы говорите об объектах одного класса:))

Для оператора присваивания просто перегрузите оператор присваивания в соответствии с реализацией вашего класса.

Объект может потребоваться для инициализации или создания или приравнивания к другому объекту, когда объект зависит от других объектов.

В этом случае конструктор копирования дает наилучшее решение .. потому что он не копирует объект в другой объект по крупицам. Побитовое копирование создает проблему, если память динамически выделяется для объекта. таким образом, решениями является определение copy_constructor в классе. Конструктор копирования использует ссылку на существующий объект того же типа, что и его аргумент, и он используется для создания нового объекта из существующего. Вот пример для приравнивания объектов к другим объектам с помощью конструктора копирования.

#include "stdafx.h"
#include "iostream"
using namespace std;
class array
{
int *ptr;
int size;
public:
array (int sz) {
ptr = new int [sz];
size =sz;
for(int index=0;index<size;index++)
ptr[index]=size;
}
~array(){
delete[] ptr;
}
array(array &a) {
int index;
ptr=new int[a.size];
for(index=0;index<a.size;index++)
ptr[index]=a.ptr[index];
cout<<"copy_constructor invoked"<<endl;
}
};

int _tmain(int argc, _TCHAR* argv[])
{
array num(10);
array x(num); //invokes copy_constructor
array y=num; //invokes copy consturctor

return 0;
}

Этот ответ относится к C #.

Наряду с оператором Overloading = вы также должны переопределить метод равно . Вам также следует проверить рекомендации для перегрузки, равной () и оператор ==

public struct Complex 
{
   double re, im;
   public override bool Equals(Object obj) 
   {
      return obj is Complex && this == (Complex)obj;
   }
   public override int GetHashCode() 
   {
      return re.GetHashCode() ^ im.GetHashCode();
   }
   public static bool operator ==(Complex x, Complex y) 
   {
      return x.re == y.re && x.im == y.im;
   }
   public static bool operator !=(Complex x, Complex y) 
   {
      return !(x == y);
   }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top