Sobrecarga de operadores



AULA 12 – Conversão de Tipos

← Conversão implícita em C

A linguagem C permite atribuições e operações entre tipos diferentes, fazendo conversões implícitas, ainda que essas conversões sejam desastrosas. A responsabilidade pela lógica das conversões é do programador.

Conversões em C++



C++ mantém as conversões implícitas de C para tipos definidos pela linguagem e acrescenta as funções operadoras de conversão, permitindo que o programador defina suas próprias conversões entre tipos definidos por ele, (classe para classe) ou entre um tipo pré-definido da linguagem e um tipo por ele definido (por exemplo classe para float).

As funções de conversão são acionadas quando o compilador espera um objeto de uma classe e recebe outra em uma atribuição, ou em utilizações de cast tendo o tipo da classe como parâmetro, ou ainda em chamada de função.

C++ implementa dois modos de conversão de tipos:

Conversão com função construtora;

Conversão com funções operadoras.

Conversão com função construtora

← Sintaxe:

class Nome_da_classe {

...

public:

Nome_da_classe ( Nome_tipo ); // função construtora

}

Permite a definição de construtores especiais cuja finalidade é a conversão de um tipo da linguagem ou definido pelo programador ( Nome_ Tipo ) no tipo da classe à qual pertence o construtor ( Nome_da_classe ) .

Se Nome_tipo é um tipo definido pelo usuário (outra classe), então deve permitir à classe na qual vai ser convertido, acessar seus meus privados. Portanto a construtora de conversão de Nome_da_classe deve ser friend da classe Nome_tipo.

Se a função construtora da classe Nome_da_classe tiver mais parâmetros, todos deverão ter valores default.

Exemplo:

float const PARALELO = 2.38;

class Real;

class Dolar {

float money;

public:

Dolar (float mon) { money = mon };

Dolar (Real& );

};

class Real {

double dinheiro;

public:

Real (double grana) { dinheiro = grana };

friend Dolar::Dolar (Real& );

};

Dolar::Dolar (Real& valor) { money = (float valor/PARALELO); }

Implemente o exemplo da página 239 do livro Orientação a Objetos em C++

Conversão com funções operadoras

Geralmente, as conversões com funções operadoras ocorrem entre uma classe e outro tipo. Isto exige que a função operadora seja membro da classe a ser convertida.

Sintaxe:

class Nome_da_classe {

...

public:

Nome_da_classe :: operator ( Nome_tipo ); // função construtora

}

Nome_tipo é o tipo de destino da conversão e Nome_da_classe é o tipo da classe a ser convertida.

A função operadora de conversão não pode ter argumentos e seu retorno é seu próprio nome

Exemplo:

float const PARALELO = 2.38;

class Dolar {

float money;

public:

Dolar (float mon) { money = mon };

};

class Real {

double dinheiro;

public:

Real (double grana) { dinheiro = grana };

operator Dolar ( ); // conversão de Real em Dolar

operator unsigned long ( ); // conversão de Real em unsigned long

};

Real::operator Dolar ( ) { return Dolar ( (float) dinheiro/PARALELO ); }

Real::operator unsigned long ( ) { return (unsigned long) dinheiro); }

Implemente o exemplo da página 241 do livro Orientação a Objetos em C++

................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download