Compartilhar via


Copiar objetos de classe

A operação de atribuição e a operação de inicialização causam objetos a serem copiados.

  • atribuição: Quando o valor de um objeto é atribuído a um outro objeto, o primeiro objeto é copiado para o segundo objeto.Portanto,

    Point a, b;
    ...
    a = b;
    

    faz com que o valor de b a ser copiado para a.

  • inicialização: A inicialização ocorre quando um novo objeto está declarado, quando os argumentos são passados funções por valor, ou quando os valores das funções são retornados pelo valor.

Você pode definir a semântica de “copy” para objetos do tipo da classe.Por exemplo, considere esse código:

TextFile a, b;
a.Open( "FILE1.DAT" );
b.Open( "FILE2.DAT" );
b = a;

O código anterior pode significar a “imprimir o conteúdo de FILE1.DAT a FILE2.DAT” ou ela pode significar que “ignorar FILE2.DAT e faça a b uma segunda identificador para FILE1.DAT”. Você deve anexar a semântica copiando apropriado para cada classe, como segue.

  • Usando o operador de atribuição operator= juntamente com uma referência à classe digite como o tipo de retorno e o parâmetro passado por const de para o exemplo ClassName& operator=(const ClassName& x);.

  • Usando o construtor de impressão.Para obter mais informações sobre o construtor de impressão, consulte Regras para declarar os construtores.

Se você não declara um construtor de impressão, o compilador gera um construtor membro prudente de impressão para você. Se você não declarar um operador de atribuição de impressão, o compilador gera um operador de atribuição membro prudente de impressão para você. Declare um construtor de impressão não impede o operador de atribuição compilador-geradas de impressão, ou vice-versa.Se você implementar uma, recomendamos que você também implementa outro para que o significado de código é claro.

a atribuição membro sábia é abordado em detalhes em Memberwise de inicialização e de atribuição.

O construtor de impressão recebe um argumento de tipo nome de classe**&**nome de classe , onde é o nome da classe para o construtor é definido.Por exemplo:

// spec1_copying_class_objects.cpp
class Window
{
public:
    Window( const Window& ); // Declare copy constructor.
    // ...
};

int main()
{
}
ObservaçãoObservação

Faça o tipo de argumento nome de classe const& de construtor de cópia sempre que possível.Isso impede que o construtor de impressão altere acidentalmente o objeto que está copiando.Também habilita a cópia dos objetos de const .

Consulte também

Referência

Funções de membro especial (C++)