Pergunta

Eu sei que você pode fazer dois objetos iguais uns aos outros quando um deles está sendo declarado. Eu testei isso no meu programa. mas quando eu fui para utilizar um comando de atribuição ele se apavorou. você pode fazer dois objetos iguais uns aos outros com uma declaração de atribuição ou você só pode fazer isso quando um objeto está sendo declarada?

Foi útil?

Solução

Você tem fornecer operador = para uma classe de modo copiar o conteúdo de outro objeto. Por exemplo:

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
}

Outras dicas

Sobrecarga operador de atribuição para esse objeto pode ajudá-lo. (Espero que você está falando sobre objetos da mesma classe:))

Para operador de atribuição apenas operador de atribuição sobrecarga de acordo com sua implementação da classe.

O objeto pode ser necessário inicializar ou criar ou equiparado com outro objeto quando o objeto é dependente de outros objetos.

Neste caso, copie construtor dá o melhor solution..because não copiar o objeto para outro objeto por pouco a pouco. cópia bit a bit cria problema se a memória é alocada dinamicamente ao objeto. assim, as soluções é a definição do copy_constructor na cópia constuctor class.The leva referência a um objecto existente do mesmo tipo como argumento, e é utilizado para criar um novo objecto a partir de um já existente. Aqui está um examplet para equiparar os objetos com outros objetos usando construtor de cópia ..

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

Esta resposta se aplica a C #.

Junto com Sobrecarga operador = você também deve substituir é igual a método . Você também deve verificar Diretrizes para Sobrecarga Equals () e operador ==

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);
   }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top