c++ class e constructors

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...
 
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.
 
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.
 
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 = ....
 
(...)classe (ou objecto pelo que o teu prof chama)(...)

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 : )
 
|[Kaos]|;4136891 disse:
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 : )


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
 
|[Kaos]|;4136891 disse:
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 : )

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:
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.
 
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:
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.

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.
 
Acho que não percebeste o porquê da minha resposta. Estava a referir-me a esta passagem:

As instância têm estrutura de dados privada (variáveis de instância) e comportamento (métodos de instância)

As instâncias não têm métodos de instância as classes é que têm dai a minha resposta.
 
|[Kaos]|;4136891 disse:
Só para entrar em preciosismos, uma classe não é um objecto. Um objecto é uma instância de uma classe.

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