Domanda

So che puoi rendere due oggetti uguali tra loro quando uno di essi viene dichiarato. ho provato questo nel mio programma. ma quando sono andato a usare una dichiarazione di incarico è andato fuori di testa. Puoi rendere due oggetti uguali tra loro con un'istruzione di assegnazione o puoi farlo solo quando viene dichiarato un oggetto?

È stato utile?

Soluzione

Hai fornito l'operatore = a una classe in modo da copiare il contenuto di un altro oggetto. Ad esempio:

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
}

Altri suggerimenti

Il sovraccarico dell'operatore di assegnazione per quell'oggetto può aiutarti. (Spero che tu stia parlando di oggetti della stessa classe :))

Per l'operatore di assegnazione è sufficiente sovraccaricare l'operatore di assegnazione in base all'implementazione della classe.

All'oggetto potrebbe essere richiesto di inizializzare o creare o equiparare un altro oggetto quando l'oggetto dipende da altri oggetti.

In questo caso, il costruttore di copie offre la soluzione migliore ... perché non copia l'oggetto su un altro oggetto bit per bit. La copia bit a bit crea problemi se la memoria viene allocata dinamicamente all'oggetto. pertanto, la soluzione è la definizione del copy_constructor nella classe. Il costitutivo della copia prende riferimento a un oggetto esistente dello stesso tipo del suo argomento e viene utilizzato per creare un nuovo oggetto da uno esistente. Ecco un esempio per equiparare gli oggetti ad altri oggetti usando il costruttore di copie ..

#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;
}

Questa risposta si applica a C #.

Insieme a Overloading = operatore, dovresti anche eseguire l'override è uguale al metodo . Dovresti anche controllare Linee guida per Sovraccarico di uguali () e operatore ==

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);
   }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top