Murilo :P

Computação, programação, web e afins :)

Archive for Junho 2009

Mais Sobre Construtores em C++

com um comentário

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.

Escrito por Murilo Adriano

Segunda-feira 15 de Junho de 2009 em 23:51

Publicado em C/C++, Programação