Classes e objetos

1. O que são Classes e Objetos?

  • Classe: É um molde que define os atributos (dados) e métodos (funções) que os objetos daquele tipo terão. Por exemplo, uma classe Carro pode ter atributos como cor e modelo, e métodos como acelerar() e travar().
  • Objeto: É uma instância concreta de uma classe. Se Carro é a classe, então meuCarro é um objeto criado a partir desse molde ou classe.

2. Estrutura Básica de uma Classe em C++

class Pessoa {
private:
std::string nome;
int idade;

public:
// Construtor
Pessoa(std::string n, int i) {
nome = n;
idade = i;
}

// Método para exibir dados
void exibir() {
std::cout << "Nome: " << nome << ", Idade: " << idade << std::endl;
}
};
  • private: Atributos acessíveis apenas dentro da classe.
  • public: Métodos acessíveis fora da classe.

3. Criar Objetos (Instanciando Classes)

int main() {
Pessoa p1("João", 30); // Cria um objeto do tipo Pessoa
p1.exibir(); // Chama o método exibir
return 0;
}
  • Aqui, p1 é um objeto da classe Pessoa.

4. Construtores e destrutores

Veja um tutorial breve e direto sobre construtores e destrutores em C++:

O que são Construtores?

  • Construtores são funções especiais de uma classe, chamadas automaticamente quando um objeto é criado.
  • Têm o mesmo nome da classe e não possuem tipo de retorno.
  • Servem para inicializar os atributos do objeto e podem ser sobrecarregados (vários construtores com diferentes parâmetros).

Tipos principais de construtores:

  • Construtor padrão: Não recebe parâmetros.
  • Construtor por parâmetros: Recebe argumentos para inicializar os atributos.
  • Construtor de cópia: Recebe outro objeto da mesma classe e copia os seus valores.

Exemplo prático:

#include <iostream>
using namespace std;

class Filme {
public:
string titulo;
string diretor;
unsigned int anoDeLancamento;

// Construtor padrão
Filme() : titulo("sem titulo"), diretor("ninguem"), anoDeLancamento(9999) {}

// Construtor por parâmetros
Filme(const string& t, const string& d, unsigned int a)
: titulo(t), diretor(d), anoDeLancamento(a) {}

// Construtor de cópia
Filme(const Filme& outro)
: titulo(outro.titulo), diretor(outro.diretor), anoDeLancamento(outro.anoDeLancamento) {}
};
  • Ao criar um objeto, o construtor correspondente é chamado automaticamente:
Filme a; // Construtor padrão
Filme b("Matrix", "Wachowski", 1999); // Construtor por parâmetros
Filme c(b); // Construtor de cópia

O que é o Destrutor?

  • Destrutor é uma função especial chamada automaticamente quando um objeto é destruído (ex.: fim do escopo ou uso de delete).
  • O nome é o mesmo da classe, mas precedido por ~ (til) e não recebe parâmetros nem retorna valor.
  • Usado para liberar recursos, fechar arquivos, desalocar memória etc.

Exemplo prático:

class Filme {
public:
// ... (construtores como acima)
~Filme() {
cout << "Destruindo objeto Filme: " << titulo << endl;
}
};

Resumo prático

  • Construtor: inicializa o objeto ao ser criado.
  • Destrutor: executa ações finais quando o objeto é destruído.
  • Ambos são fundamentais para o gerenciamento seguro de recursos em C++.

4. Métodos Getters e Setters

Para acessar ou modificar atributos privados, usamos métodos públicos chamados getters e setters:

class Pessoa {
private:
std::string nome;

public:
void setNome(std::string n) {
nome = n;
}
std::string getNome() {
return nome;
}
};
  • Isso garante o encapsulamento dos dados.

5. Dicas Importantes

  • Separe a declaração da classe (geralmente em .h ou .hpp) da implementação dos métodos (em .cpp), especialmente em projetos maiores.
  • Use construtores para inicializar objetos e destrutores para libertar recursos, se necessário.

6. Exemplo Completo

#include <iostream>
using namespace std;

class Pessoa {
private:
string nome;
int idade;
public:
Pessoa(string n, int i) : nome(n), idade(i) {}
void exibir() {
cout << "Nome: " << nome << ", Idade: " << idade << endl;
}
};

int main() {
Pessoa p1("Maria", 25);
p1.exibir();
return 0;
}

Este exemplo cria uma classe, instancia um objeto e exibe seus dados.