Andersonjb Postado Maio 31, 2005 Denunciar Share Postado Maio 31, 2005 Sera que alguém poderia me ajudar? O que são construtores e para que eles servem? Eles tem alguma coisa a ver com classes? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Maio 31, 2005 Denunciar Share Postado Maio 31, 2005 Sera que alguém poderia me ajudar? O que são construtores e para que eles servem? Eles tem alguma coisa a ver com classes? Sim, eles têm tudo haver com classes. Um construtor define o que um objeto fará (ou definirá) quando for inicializado (construído). Creio que você saiba o que é um objeto, mas mesmo assim vale lembrar que um objeto nada mais é do que uma instância (cópia) de uma classe que existirá por si só. Portanto, objetos terão membros (propriedades e métodos) que *podem* precisar serem inicializados. Nesse caso, o construtor é o maneira ideal de inicializá-los automaticamente. E existem ainda outros casos em que um construtor é muito útil (para definir objetos diferentes de acordo com os parâmetros passados).Abraços,Graymalkin Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Andersonjb Postado Maio 31, 2005 Autor Denunciar Share Postado Maio 31, 2005 Opa, so tirandoalguma duvidas Um objeto e uma variavel membro de uma classe, estou certo?Agoracomo assim um objeto e uma instancia de uma classe? E porque e uma copia dela? E construtor então seria uma função que "carrega" todas as configuraçoes de um objeto. e isso? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Maio 31, 2005 Denunciar Share Postado Maio 31, 2005 Opa, so tirandoalguma duvidas Um objeto e uma variavel membro de uma classe, estou certo?Agoracomo assim um objeto e uma instancia de uma classe? E porque e uma copia dela? E construtor então seria uma função que "carrega" todas as configuraçoes de um objeto. e isso? Não, um objeto *não* é uma variável membro de uma classe. Uma variável membro da classe é que *pode* ser um objeto. Imagine uma classe Automóvel. A partir dessa classe é que criaremos os objetos Fiesta, Vectra, Ka, Astra, Gol, etc. Ou seja, um objeto chamado Fiesta é uma instância da classe (ele tem todas as características da classe, porém é como se fosse feita uma cópia dessas características só para esse objeto).E sim, um construtor pode ter esse papel de carregar todas as "configurações" do objeto. Para ficar mais claro, decidi montar um exemplo de uma classe com dois contrutores. Sei que o modo como declarei a classe não está nos "conformes" da OO (as propriedades deveriam ser private e ter métodos para acessá-las) e nem do esquema de C++ (ou seja, criar um arquivo de cabeçalho para a classe)... mas é só um exemplo. Você pode copiar e colar isso aí em um novo arquivo e compilar (usei o Dev-C++ aqui):#include <stdlib.h> #include <iostream> using namespace std; class Automovel { public: char *nome; int portas; double motor; char *cor; Automovel() { this->nome = "sem nome"; this->portas = 0; this->motor = 0.00; this->cor = "sem cor"; } Automovel(char *nome, int portas, double motor, char *cor) { this->nome = nome; this->portas = portas; this->motor = motor; this->cor = cor; } }; int main() { // Objeto criado com o construtor SEM ARGUMENTOS Automovel *vectra = new Automovel(); vectra->nome = "Vectra"; // Preenchimento dos atributos vectra->portas = 4; vectra->motor = 2.2; vectra->cor = "prata"; // Objeto criado com o construtor que já preenche os atributos Automovel *fiesta = new Automovel("Fiesta", 2, 1.0, "amarelo"); cout << vectra->nome << endl; cout << vectra->portas << endl; cout << vectra->motor << endl; cout << vectra->cor << endl; cout << fiesta->nome << endl; cout << fiesta->portas << endl; cout << fiesta->motor << endl; cout << fiesta->cor << endl; system("pause"); } Note os dois contrutores (Automovel() e Automovel(...)) e repare os exemplos de criação de objetos utilizando cada um deles. Veja que o segundo (utilizado no objeto fiesta) é bem mais compacto e prático.Certo? Abraços,Graymalkin Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Andersonjb Postado Junho 2, 2005 Autor Denunciar Share Postado Junho 2, 2005 E ai, eu sei que eu sou meio chato, mas so resumindo... então um construtor so serve para mim definir as propriedades de um objeto? Por exemplo: se eu tenho um objeto VECTRA(); o construtor serve para mim inicializar as propriedades de vectra? E outra: você disse que um objeto e uma instancia de uma classe, mas como posso distinguir objetos de variaveis membros? E no seu exemplo: se eu definisse as carros como variaveis membros, não daria no mesmo? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Junho 4, 2005 Denunciar Share Postado Junho 4, 2005 E ai, eu sei que eu sou meio chato, mas so resumindo...Não, você não é "meio chato", apenas está com uma dúvida. Isso é perfeitamente normal.então um construtor so serve para mim definir as propriedades de um objeto? Por exemplo: se eu tenho um objeto VECTRA(); o construtor serve para mim inicializar as propriedades de vectra?*Pode* servir para isso e não significa que *somente* faz isso. Você tem que imaginar um construtor como um método que é chamado *automaticamente* quando da criação de um objeto da classe. Um construtor, por exemplo, poderia abrir um arquivo em disco, se isso fosse necessário para a classe. E, também poderia fazer qualquer outra coisa. Todavia, o uso mais comum é justamente esse que exemplifiquei (definir as propriedades de um objeto durante a sua criação).E outra: você disse que um objeto e uma instancia de uma classe, mas como posso distinguir objetos de variaveis membros? E no seu exemplo: se eu definisse as carros como variaveis membros, não daria no mesmo?Não entendi... o que você compreende por "variáveis membros"? Que eu saiba, uma "variável membro" é a mesma coisa que um "atributo" (ou uma "propriedade", ou ainda uma "variável de classe" ou uma "variável de instância"... êta negócio pra ter nome... ). No caso ali acima, 'nome', 'portas', 'motor' e 'cor' são "variáveis membros" (ou "propriedades", ou "atributos", ou "variáveis de instância") da classe "Automovel".Abraços,Graymalkin Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Guest Postado Junho 4, 2005 Denunciar Share Postado Junho 4, 2005 ai, no www.criarweb.com eles explicam isto, como eu estou programando em JavaScript, lá dá uma idéia do que a POO:( Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Andersonjb Postado Junho 5, 2005 Autor Denunciar Share Postado Junho 5, 2005 E ai, graymalkin, beleza? Valeu pela resposta, entendi tudinho, , você e muito bom, cara, mas so resotu uma duvidazinha: O que o objeto numa classe então? A classe e o objeto em si, ou os registros da classe são objetos, por exemplo:class Automovel{ int marca;}Fiesta;então o Fiesta seria o objeto? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Junho 5, 2005 Denunciar Share Postado Junho 5, 2005 mas so resotu uma duvidazinha: O que o objeto numa classe então? Você pode pensar na classe como a definição e no objeto como a concretização real da definição. No caso ali, "Automovel" é a classe. Mas, qual "Automovel" é esse? O que ele tem? Qual a sua cor? Qual o seu motor? Quantas portas ele tem? Não se sabe, mas sabe-se que *todo* "Automovel" vai ter isso (ou seja, isso está definido na classe). É nos objetos (fiesta e vectra) que vemos a concretização dessa definição, já que eles possuem os atributos preenchidos com seus respectivos valores (sabemos que fiesta é um automóvel Fiesta, amarelo, com motor 1.0 e duas portas; e que vectra é um automóvel Vectra, prata, com motor 2.2 e quatro portas).Uma classe é um modelo, enquanto que um objeto é algo real criado a partir do modelo (ou seja, da classe). Note que a classe é sempre algo mais abrangente (Automóvel, Pessoa, Animal, Equipamento, Cliente, Fornecedor, etc.), enquanto que o objeto é particular (fiesta, vectra, junior, anderson, gato, girafa, teclado, monitor, cliente1, cliente2, empresa1, empresa2, etc.).Ah, antes que alguém se manifeste, nomes de classes são com a primeira letra maiúscula (Pessoa) enquanto que objetos são descritos com todas as letras minúsculas (junior). Isso *não* é obrigatório, mas é uma convenção que ajuda a distinguir classes e objetos (ou seja, é uma boa prática de programação). E meu "Automovel" não tem acento porque o código em C++ não admite (e por isso que coloco entre aspas aqui).Certo? Abraços,Graymalkin Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Andersonjb Postado Junho 5, 2005 Autor Denunciar Share Postado Junho 5, 2005 Ah, ta, agora ficou tudo mais claro.. E já aproveitando que o assunto ta muito bom, hehehe, o que é secão de inicialização e pra que serve? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Junho 5, 2005 Denunciar Share Postado Junho 5, 2005 Ah, ta, agora ficou tudo mais claro.. E já aproveitando que o assunto ta muito bom, hehehe, o que é secão de inicialização e pra que serve? "Seção de inicialização"? Acho que nunca me deparei com esse termo (a não ser que eu conheça um outro equivalente e não saiba). Em qual contexto você viu isso? Foi em alguma referência bibliográfica?Abraços,Graymalkin Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Andersonjb Postado Junho 5, 2005 Autor Denunciar Share Postado Junho 5, 2005 Opa, eu to estudando pelo c++ absoluto, já ouviu falar? assim, o codigo a que se refere e esse aqui:DiadoAno(classe)::DiadoAno(int valordia, int valormes)(//*Construtor*//) ::dia(valordia), mes(valormes)já viu esse negocio? eu já vi ele ate no C++ Builder, mas não consegui entender... você sabe o que e? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Junho 5, 2005 Denunciar Share Postado Junho 5, 2005 Opa, eu to estudando pelo c++ absoluto, já ouviu falar? assim, o codigo a que se refere e esse aqui:DiadoAno(classe)::DiadoAno(int valordia, int valormes)(//*Construtor*//) ::dia(valordia), mes(valormes)já viu esse negocio? eu já vi ele ate no C++ Builder, mas não consegui entender... você sabe o que e? O código está escrito assim mesmo? Bom, um código parecido com esse aí é utilizado quando se vai definir a implementação de um método. Exemplo:tipo_retorno Classe::método(parâmetros) { // código; } Ou, se for um construtor (como é o caso): Classe::método_construtor(parâmetros) { // código; }Agora aquela "(classe)" ali é que acho que nunca vi desse jeito.Abraços,Graymalkin Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Andersonjb Postado Junho 5, 2005 Autor Denunciar Share Postado Junho 5, 2005 E ai, graymalkin, eu consegui entender o que é! Por exemplo, olha este codigo:DiadoAno::DiadoAno(int valordia, int valormes)::dia(valordia), mes(valormes){if((dia<1) || (dia>31)){cout<<"Valor de dia ilegal!";exit(1);}if((mes<1) || (mes>12)){cout<<"Valor de mes ilegal!";exit(1);}}O setor de inicialização inicia os parametros de acordo com a necessidade do usuario, nesse codigo acima ele não deixa o usuario digitar um numero invalido no construtor!Entendeu como que e? Hehehe, como e bom estudar!!! Valeu, ate a proxima, hein! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Junho 5, 2005 Denunciar Share Postado Junho 5, 2005 E ai, graymalkin, eu consegui entender o que é! Por exemplo, olha este codigo:DiadoAno::DiadoAno(int valordia, int valormes)Ah, agora sim está escrito do modo correto.O setor de inicialização inicia os parametros de acordo com a necessidade do usuario, nesse codigo acima ele não deixa o usuario digitar um numero invalido no construtor!Entendeu como que e? Hehehe, como e bom estudar!!! Valeu, ate a proxima, hein!Sim, essa também *pode* ser uma tarefa do construtor, ou seja, validar os dados inseridos.Abraços,Graymalkin Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Andersonjb
Sera que alguém poderia me ajudar? O que são construtores e para que eles servem? Eles tem alguma coisa a ver com classes?
Link para o comentário
Compartilhar em outros sites
14 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.