1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

c++ class e constructors

Discussão em 'Programação' iniciada por |-PiMpaNs-|, 5 de Janeiro de 2009. (Respostas: 14; Visualizações: 755)

  1. |-PiMpaNs-|

    |-PiMpaNs-| Banido

    Boas,

    Sou iniciante de programação a c++, o meu stor explicou estes conceitos mas existe algo que nao compreendo e nao ocnsigo perceber o que ele diz, nem como explica, pois complica demasiado o que pode ser dado facilmente.

    Pretendia obter respostas simples, com ideias simples, nada de complexo so para formar na minha cabeça melhor as ideias.

    Constructores, para que servem e qual a logica/sintax num programa.

    Um dos programas que mandou fazer, mandou fazer isto assim por alto:

    -Uma class produto onde sao contados 3 objectos
    -deve mostrar o numero do objtecto(se é o 1,2,3 que estamos a inserir(utilizando static))
    -depois mostrar o seu conteudo

    O que nao percebi foi como dentro de uma class, consigo à medida que for inserindo, ele me inciar que é o primeiro ou o segundo, terei que chamar fora da class a função?:S

    Nao sei se me fiz entender...
     
  2. BladeRunner2019

    BladeRunner2019 Power Member

    Ao usares uma variável estática dentro de uma classe, podes contar o número de objectos criados, uma vez que a zona de memória afecta à mesma é partilhada por todos os objectos.

    Ou seja por cada objecto que criares incrementas a variável e podes a qualquer altura saber quantos objs tens... e podes fazer esta operação usando os construtores.
     
  3. |-PiMpaNs-|

    |-PiMpaNs-| Banido

    ah...!

    Consegues me mostrar um exemplo simples?
     
  4. Granadafeup

    Granadafeup Power Member

    O construtor é o método que é executado quando é criada uma instância da tua classe (ou objecto pelo que o teu prof chama), ou seja, é o método que constroi o objecto.

    So tens de implementar um contrutor com o a logica que o BladeRunner descreveu.
     
  5. De grosso modo é para fazeres algo do género

    AMinhaClass xpto = valor_xpto

    basicamente o construtor é para inicializar as variaveis da tual class

    mas para isto funcionar terias de sobrecarregar o operador = ....
     
  6. |[Kaos]|

    |[Kaos]| Power Member

    Só para entrar em preciosismos, uma classe não é um objecto. Um objecto é uma instância de uma classe.

    Um exemplo na vida real para tentar perceber melhor as coisas:
    - MAÇÃS: uma classe;
    - MAÇÃ VERMELHA: um objecto, que herda as características das maçãs e no construtor (neste caso a macieira :P) foi definido que tem cor vermelha.

    A nossa maça vermelha, como herda todas as características das maçãs, podes semeá-la, vê-la crescer, colhe-la, come-la, e se não a colheres, apodrece : )
     
  7. |-PiMpaNs-|

    |-PiMpaNs-| Banido


    Exacto, isso eu sei, por acaso nao reparei no que ele disse.
    Só nao sei a sintax de um constructor, chamo-o dentro da class, ou fora?:S
     
  8. Baderous

    Baderous Banido

    Na verdade as classes podem ser consideradas objectos. Aquilo que caracteriza um objecto é o facto de ter estrutura de dados privada (variáveis) e comportamento (métodos). As instâncias têm estrutura de dados privada (variáveis de instância) e comportamento (métodos de instância), os quais estão definidos na classe a partir da qual foram criadas. Uma classe também pode ter estrutura de dados privada (variáveis de classe) e comportamento (métodos de classe), para além da definição das variáveis e métodos de instância. Os métodos de instância são activados por mensagens enviadas às instâncias. Os métodos de classe são activados por mensagens enviadas à classe. Não deixa de ser um objecto. No entanto são objectos particulares porque guardam a estrutura e o comportamento que vai ser comum a todas as instâncias a partir de si criadas.
     
    Última edição: 6 de Janeiro de 2009
  9. IComeFromBehind

    IComeFromBehind Power Member

    Uma instancia de uma classe em memória em C++ não contem qualquer especificação dos métodos a que pode responder. De facto em C++ não há o conceito de mensagens para os objectos.
     
  10. |[Kaos]|

    |[Kaos]| Power Member

    Podes considerar sendo como um objecto, mas existem diferenças para que uma classe não seja um objecto. Coisas como um objecto poder ser criado e "destruído" durante a execução do programa enquanto que uma classe "vive" até ao fim do programa. Mas sim, também percebo esse ponto de vista.

    Retomando ao tópico, |-PiMpaNs-|, o construtor é um método da classe portanto tem de ser definido dentro da mesma. E este método é chamado dentro do programa principal. Por exemplo:

    Código:
    #include <iostream>
    using namespace std;
    
    class teste
    {
    	private: 
    		int valor;
    	public:
    		teste(int param) //Construtor
             { 
                 valor = param;
             }
    		void imprime_valor()
    		{
    			cout << valor;
    		}
    };
    
    int main ( void ) {
    
    	teste obj(2); // construtor
    	obj.imprime_valor(); // metodo da classe para imprimir valor no ecra
    
    	cin.get(); // so para que a janela nao feche logo
    	return 0;
    }
    
    como vês pelo construtor inicializas logo a variável valor a 2.
     
    Última edição: 6 de Janeiro de 2009
  11. Baderous

    Baderous Banido

    A especificação dos métodos é feita na classe e não na instância. Ao receber a mensagem, é procurada na classe que criou a instância um método cujo nome, número, tipo e ordem dos parâmetros (ou seja, assinatura) correspondam aos que foram enviados na mensagem. Este conceito é transversal às linguagens orientadas a objectos, sejam elas SmallTalk, Java, C#, C++, wtv. Não é necessária qualquer referência do método na instância. Basta saber o tipo do objecto que recebe a mensagem.
     
  12. IComeFromBehind

    IComeFromBehind Power Member

    Acho que não percebeste o porquê da minha resposta. Estava a referir-me a esta passagem:

    As instâncias não têm métodos de instância as classes é que têm dai a minha resposta.
     
  13. Baderous

    Baderous Banido

    Ah tens razão, vou corrigir.
     
  14. |-PiMpaNs-|

    |-PiMpaNs-| Banido

    Muito obrigado a todos, acho que consegui perceber bem melhor agora =)

    Obrigado pelo exemplo |[Kaos]| ;)
     
  15. Granadafeup

    Granadafeup Power Member

    Acho que no meu post está "instância da tua classe (ou objecto pelo que o teu prof chama)" mas obrigado pela "correcção".
     

Partilhar esta Página