сделать объект равным другому объекту
Вопрос
Я знаю, что вы можете сделать два объекта равными друг другу, когда один из них объявлен. Я проверил это в моей программе. но когда я пошел использовать оператор присваивания, он взбесился. Можете ли вы сделать два объекта равными друг другу с помощью оператора присваивания или вы можете сделать это только тогда, когда один объект объявлен?
Решение
Вы предоставили 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);
}
}