Murilo :P

C++, Computação, Programação, Web e afins :)

Archive for June 2009

Mais Sobre Construtores em C++

with one comment

C++Dessa vez não vou falar muito mas sim exemplifiar um dos features (hehehe) do C++ que são as diferentes maneiras de “construir” um objeto. O código está todo em um arquivo para facilidar a visualização aqui no blog.

Eis o código:

#include <iostream>

using std::cout;

class Teste
{
        char tipo;
        int valorInt;
        char valorChar;
        double valorDouble;
        
public:
        Teste(const Teste& t)
        {
                tipo = t.getTipo();
                valorInt = t.getValorInt();
                valorChar = t.getValorChar();
                valorDouble = t.getValorDouble();
        }
        
        Teste(char v)
        {
                tipo = 'c';
                valorInt = 0;
                valorChar = v;
                valorDouble = 0;
        }
        
        Teste(int v)
        {
                tipo = 'i';
                valorInt = v;
                valorChar = 0;
                valorDouble = 0; 
        }
        
        Teste(double v)
        {
                tipo = 'd';
                valorInt = 0;
                valorChar = 0;
                valorDouble = v;
        }
        
        char getValorChar() const { return valorChar; };
        int getValorInt() const { return valorInt; };
        double getValorDouble() const { return valorDouble; };
        char getTipo() const { return tipo; };
        
        void imprimeValor() const 
        {
                if (tipo == 'c') cout << valorChar;
                else if (tipo == 'd') cout << valorDouble;
                else cout << valorInt;
                
                cout << '\n';
        };
        
        ~Teste() {};
                
};


int main()
{
        Teste a = 1;
        Teste b = 'm';
        Teste c = 3.1417;
        Teste d = (Teste)2;
        Teste e = a;
        Teste f(100);
        Teste g = static_cast<Teste>('a');
        
        a.imprimeValor();
        b.imprimeValor();
        c.imprimeValor();
        d.imprimeValor();
        e.imprimeValor();
        f.imprimeValor();
        g.imprimeValor();

}

E a saída correspondente:

1
m
3.1417
2
1
100
a

Internamente todas as formas de construir o objeto fazem a mesma coisa: procuram um construtor que espere aquele tipo de parâmetro e cria um objeto (no caso Teste).

Claro que isso pode ser modificado se sobrecarregarmos o operator=, operator() (unário) ou usar a keyword explicit na declaração dos construtores.

Written by Murilo Adriano

15 de June de 2009 at 23:51

Posted in C/C++, Programação