Frage

Ich weiß, Sie können miteinander zwei Objekte gleich, wenn einer von ihnen erklärt wird. Getestet habe ich dies in meinem Programm. aber wenn ich ging eine Zuweisungsanweisung verwenden, um es ausgeflippt. Können Sie zwei Objekte machen mit einer Zuweisungsanweisung gleich zueinander oder können Sie nur das tun, wenn ein Objekt deklariert wird?

War es hilfreich?

Lösung

Sie haben Betreiber bieten = eine Klasse, um den Inhalt eines anderen Objekts kopieren. Zum Beispiel:

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
}

Andere Tipps

Eine Überlastung Zuweisungsoperator für dieses Objekt kann Ihnen helfen. (Ich hoffe, Sie sprechen über Objekte der gleichen Klasse:))

Für Zuweisungsoperator nur Zuweisungsoperator überlastet nach Ihrer Klassenimplementierung.

Das Objekt kann erforderlich sein, mit einem anderen Objekt zu initialisieren, oder zu erstellen oder gleichgesetzt, wenn das Objekt von anderen Objekten abhängig ist.

In diesem Fall kopieren Konstruktor gibt die beste solution..because es nicht um das Objekt ein anderes Objekt durch bitweise kopiert. Bitweise Kopie erstellt Problem, wenn der Speicher dynamisch auf das Objekt zugeordnet ist. So ist die Lösung der den copy_constructor im class.The Kopie Konstruktor nimmt auf ein vorhandenes Objekt des gleichen Typs als Argument Referenz definiert, und es verwendet wird, um ein neues Objekt aus einem vorhandenen zu schaffen. Hier ist ein examplet die Objekte mit anderen Objekten mit Copykonstruktor zu ..

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

Diese Antwort gilt für C #.

Zusammen mit Überlastung Operator = sollten Sie auch außer Kraft setzen gleich Methode. Sie sollten auch Richtlinien überprüfen Equals für Überlastung () und Operator ==

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);
   }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top