Ir para conteúdo
Faça parte da equipe! (2024) ×
Conheça nossa Beta Zone! Novas áreas a caminho! ×
  • Quem está por aqui   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.

c++ Classes e objetos em C++ - Definições simples.


#include <Aprendiz.h>
 Compartilhar

Posts Recomendados

1- Necessário conhecimento básico da linguagem c++, paciência e bom ânimo.

2- Tópico criado no intuito de passar as definições mais básicas sobre o assunto, para ajudar quem está nesta etapa e assim como foi cmg, sofre para compreender alguns principios.

3 - Não registrado coisas sobre polimorfismo, herança e etc.

4 - Pouco uso de termos técnicos.

5 - Se achar algum erro, fique a vontade para corrigir!

POO - Programação Orientada a Objetos

 

Mas o que diabos é isso? Ouvimos/lemos por aí, c++ é orientado a objetos. Mas no começo, c e c++ parecem exatamente a mesma coisa quando não se entende o que são objetos.

O que diferencia c de c++ é isso, objetos.

Qual o primeiro passo para ter um objeto?

R: Classes.

 

Classes são estruturas de dados, semelhantes à struct do c, porém com mais recursos e possibilidades.

 

Como criar uma classe em c++

 

É necessário se cadastrar para acessar o conteúdo.

 

Isso é uma classe. Uma classe bem simples, que poderia ser substituída por struct. Até aí, quase não há diferença.

 

Você pode, assim como nas structs, declarar se um membro da classe é privado ou publico. Por bom costume, em programas grandes se usa as variaveis em modo privado. Somente as funções-membros da classe a que pertencem poderão "vê-las", não todas. Ex:

 



Class classe_de_alunos {
private:
int idade;
string nome;
public:
void receber_aluno();
}

void alunos_bons();

...
}
É necessário se cadastrar para acessar o conteúdo.

 

Usamos parametros para alocar algum valor nas variaveis-membro da classe, pois são privadas e não poderiam ser alteradas de fora da classe. Por isso, trazemos para dentro da classe o valor desejado, através dos parametros, para só então armazená-los nas variaveis-membro da classe. Usamos "this->" para literalmente "apontar" que estamos nos referindo a variavel de DENTRO da classe, e não aos parametros. Ex: o nome da variavel-membro é nome, mas o "nome" do parâmetro também é "nome", então se escrevermos nome=nome, o compilador não entende e não altera as variaveis-membro da classe.

 

podemos, e devemos, fazer o que fizemos acima, da seguinte forma :

 



Class classe_de_alunos {
private:
int idade;
string nome;
public:
void receber_aluno(string nome, int idade);
}

void classe_de_alunos::receber_aluno(string nome, int idade)
{
this-> idade = idade;
this->nome = nome;
}
É necessário se cadastrar para acessar o conteúdo.

Neste caso não há a necessidade de especificar com o uso do this-> qual é a variável membro, pois não há parâmetros.

 

nossa classe ficou assim :

 

É necessário se cadastrar para acessar o conteúdo.

 

ou, por questão de FACILIDADE de manutenção e até mesmo por estética, limpeza, podemos fazer da outra forma, com apenas os protótipos dentro e as instruções fora:

 

É necessário se cadastrar para acessar o conteúdo.

Nota: as classes e suas respectivas funções DEVEM ser definidas e implementadas ANTES do main, logo no incio do código.

 

O objeto

 

É necessário se cadastrar para acessar o conteúdo.

 

aí está o nosso objeto: meusAlunos.

Como vamos entender isso? Qual é a relação entre os dois? Pq uma classe não é um objeto propriamente dito?

Para facilitar, você pode entender dessa forma:

 

a classe é a PLANTA da casa, ou seja, todo o desenho dela, a maquete, as medidas, etc. E meusAlunos, é um casa construída a partir daquela maquete.

Classe é uma planta, e o objeto é a casa que saiu dessa planta.

Classe representa todos os tipos de carro, e o FIAT UNO é o objeto que saiu desse tipo.

Todo carro tem rodas, farol, janelas, motor. Todo objeto que seja carro, terá esse padrão: rodas, farol, janelas, motor, etc.

Classe é um TIPO de relógio, e o objeto criado a partir desse tipo é um ROLEX.

Todo relógio tem ponteiros, e marca as horas. Todo objeto do tipo relógio tem ponteiros e marca as horas.

 

ou seja, Classe_de_alunos é um TIPO, Uma Planta, um Molde, meusAlunos é um objeto que tem todos esses atributos e funções que especificamos em Classe_de_alunos.

 

Usando nosso objeto.

 

para usar nosso objeto, vamos usar o nome dele, no caso meusAlunos, seguido de . (ponto) e o nome da função dele que queremos usar.

 


int main()
{
string nome;
int idade;
classe_de_alunos meusAlunos; /// Objeto do tipo classe_de_alunos. Objeto nos moldes de classe_de_alunos. Casa feita através da planta classe_de_alunos.
cout <<"Digite o nome do aluno: ";
getline(cin, nome);
cout <<"Digite a idade do aluno: ";
cin >> idade;
meusAlunos.receber_alunos(nome, idade)
É necessário se cadastrar para acessar o conteúdo.

 

lembra que especificamos dentro da nossa classe que quando um objeto quisesse chamar essa funçao, ela retornaria nossas variaveis? pois é isso que ela fará, irá retornar o que guardamos lá dentro.

 

É necessário se cadastrar para acessar o conteúdo.

 

Você pode criar várias casas a partir de uma única planta, correto? A mesma coisa com objetos. Você pode criar vários a partir de uma classe, e um existirá independente do outro. Os comodos da casa serão todos iguais, o que mudará é o que guardamos lá dentro dela. nossos objetos tbm serão todos iguais, o que mudará será os dados que guardaremos dentro deles.

 

2 - Construtores, o método set e o método get

 

Já sabemos o que é uma classe e como usá-la, porém existem ainda muitas definições para explorar, tentarei expor aqui o mais primordial para se fazer uma classe digna e com respeito.

 

Construtores:

Construtor é o que vai construir a casa, é quem vai colocar os tijolos, as vigas e etc.

Construtor no objeto, no entanto, é quem vai colocar DADOS dentro dele.

 

um construtor, é basicamente o exemplo que utilizamos chamado receber_aluno, só que os construtores levam, obrigatoriamente, o mesmo nome da classe. E, obrigatoriamente, não retornam nenhum tipo de valor, são sempre VOID(vazios).

Outra característica do construtor é que, ele sempre se auto-executará logo que o objeto for criado.

 

vamos usar a nossa função receber_aluno e transformá-la num construtor.

 

É necessário se cadastrar para acessar o conteúdo.

 

aí está o nosso construtor, em verde.

o implementamos da mesma forma que a outra função, só alteramos o nome e deixamos o retorno vazio, não há necessidade nem de colocar o "void" antes.

 

É necessário se cadastrar para acessar o conteúdo.

 

este é o nosso construtor. Como falamos, ele será sempre executado automaticamente logo que criamos o objeto, então, podemos criar nosso objeto só quando já tivermos nossos parametros prontos.

 

nossa alteração ficou assim no final:

 

É necessário se cadastrar para acessar o conteúdo.

 

O get

usamos isso quando queremos saber o que tem dentro do nosso objeto. Na nossa explicação usamos a função "mostrar()", que é exatamente o dever do get. Neste caso, vamos apenas alterar o nome e teremos o nosso get.

 

É necessário se cadastrar para acessar o conteúdo.

 

entenda isso como, literalmente, Mostrar Alunos.

os métodos da nossa classe devem ter retorno, pois o correto, é usarmos o retorno para dar saída aos dados, usarei cout mesmo para ganharmos tempo.

 

É necessário se cadastrar para acessar o conteúdo.

 

Aí está, nosso get prontinho. Por boa prática, usamos o retorno, e não o cout, no caso teríamos que criar um get para cado dado do objeto. getNome e getIdade, e colocar em seus respectivos retornos "return nome;" e "return idade;"

 

O set

 

o método set é usado para ALTERAR os nossos dados. Por exemplo, desejo alterar o nome, vou escrever uma função setNome(nome); Ou seja, literalmente: "MudarNome, nome receberá(nome passado por parametro)".

 

É necessário se cadastrar para acessar o conteúdo.

 

isso alterará o nome, vejamos.

 


int main()
{
string nome;
int idade;
cout <<"Digite o nome: ";
getline(cin, nome);
cout <<"Digite a idade: ";
cin >> idade;
classe_de_alunos meusAlunos(nome, idade);
meusAlunos.getAlunos();
cin.ignore();
cout <<"Digite um novo nome para substituir: " <<endl;
getline(cin, nome);
meusAlunos.setNome(nome); // Altero o nome
meusAlunos.getAlunos(); // retorno os dados novamente, para conferir se foi alterado.
return 0;
}
É necessário se cadastrar para acessar o conteúdo.

 

espero que ajude alguém, ficou uma bíblia, mas tentei expor o que eu extraí de muitas explicações chatas da internet de um modo simples, sem tanto uso de termos técnicos.

Deixo também um cadastro de alunos que fiz usando objetos, como ficou bem grande, fiz usando arquivos separados, para ficar organizado. Usei headers, cabeçalhos.

 

main.cpp

 

É necessário se cadastrar para acessar o conteúdo.

 

 

classe.h

 

É necessário se cadastrar para acessar o conteúdo.

 

 

classe.cpp

 

É necessário se cadastrar para acessar o conteúdo.

 

 

 

 

  • Curtir 1

Programming noob:coracao:

Link para o comentário
Compartilhar em outros sites

Este tópico está impedido de receber novos posts.
 Compartilhar

×
×
  • Criar Novo...

Informação Importante

Nós fazemos uso de cookies no seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies , caso contrário, vamos supor que você está bem para continuar.