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çã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 . |