Question

Je sais que vous pouvez créer deux objets égaux l’un lors de la déclaration de l’un d’eux. J'ai testé cela dans mon programme. mais quand je suis allé à utiliser une déclaration de mission, il a paniqué. Pouvez-vous égaler deux objets avec une instruction d'affectation ou ne le faire que lorsqu'un seul objet est déclaré?

Était-ce utile?

La solution

Vous avez fourni operator = à une classe afin de copier le contenu d'un autre objet. Par exemple:

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
}

Autres conseils

L'opérateur d'affectation en surcharge pour cet objet peut vous aider. (J'espère que vous parlez d'objets de même classe:))

Pour l'opérateur d'affectation, il suffit de surcharger l'opérateur d'affectation en fonction de l'implémentation de votre classe.

L'objet peut être requis pour initialiser ou créer ou être assimilé à un autre objet lorsque celui-ci dépend d'autres objets.

Dans ce cas, le constructeur de copie donne la meilleure solution..parce qu’il ne copie pas l’objet dans un autre objet, bit par bit. La copie au niveau du bit crée un problème si la mémoire est allouée dynamiquement à l'objet. la solution est donc la définition du concepteur_copie dans la classe. Le composant de construction prend en référence un objet existant du même type que son argument et est utilisé pour créer un nouvel objet à partir d'un objet existant. Voici un exemple pour comparer les objets à d’autres objets en utilisant le constructeur de 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;
}

Cette réponse s'applique à C #.

Parallèlement à l'opérateur Overloading =, vous devez également remplacer équivaut à la méthode . Vous devez également vérifier les Consignes concernant la surcharge égal. () et opérateur ==

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);
   }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top