Encapsulation
Marcar un miembro como private evita que código fuera de la class lo toque directamente — la class puede entonces garantizar sus propios invariantes, ya que la única forma de cambiar su estado es a través de los methods que ella decide exponer. Un method marcado const promete no modificar el object sobre el que se llama, algo que el compilador comprueba y hace cumplir.
#include <iostream>
using namespace std;
class BankAccount {
private:
double balance;
public:
BankAccount(double initial) {
balance = initial;
}
double getBalance() const {
return balance;
}
void deposit(double amount) {
balance += amount;
}
};
int main() {
BankAccount account(100.0);
account.deposit(50.0);
cout << "Balance: " << account.getBalance() << endl;
return 0;
}Balance: 150
balance nunca puede fijarse a un valor inválido desde fuera de BankAccount, porque nada fuera de la class puede acceder a él directamente — cada cambio tiene que pasar por deposit, que la class controla por completo.
Siguiente: inheritance y polymorphism — construir una jerarquía de classes, y despachar al override correcto en tiempo de ejecución.
Practice exercise
Define una class Temperature con un private double celsius, un constructor que lo fije, y un const method getFahrenheit() que devuelva celsius * 9.0 / 5.0 + 32.0. Crea un Temperature con celsius 100.0 e imprime su valor en Fahrenheit.