Na orientação a objetos é uma boa prática você sempre declarar os atributos como privados e criar métodos públicos para manipular esses atributos ex:
#include <iostream>
#include <string>
class Carro {
private:
std::string marca;
int ano;
public:
// Construtor
Carro(std::string m, int a) {
marca = m;
ano = a;
}
// Método Getter para a marca
std::string getMarca() {
return marca;
}
// Método Setter para a marca
void setMarca(std::string m) {
marca = m;
}
// Método Getter para o ano
int getAno() {
return ano;
}
// Método Setter para o ano (com validação, por exemplo)
void setAno(int a) {
if (a > 1900 && a <= 2025) { // Exemplo de validação
ano = a;
} else {
std::cout << "Ano inválido!" << std::endl;
}
}
void exibirInfo() {
std::cout << "Marca: " << marca << ", Ano: " << ano << std::endl;
}
};
int main() {
Carro meuCarro("Ford", 2020);
meuCarro.exibirInfo();
// Não podemos acessar diretamente: meuCarro.marca = "Fiat"; // Erro! 'marca' é private
// Usando os métodos Setter e Getter
meuCarro.setMarca("Chevrolet");
meuCarro.setAno(2023);
meuCarro.exibirInfo();
meuCarro.setAno(1800); // Exemplo de validação
meuCarro.exibirInfo();
std::cout << "Marca do meu carro: " << meuCarro.getMarca() << std::endl;
return 0;
}