DMarlon Studio

Lección 1 · 1 de 20

Clases y métodos const · C++

Cree sus propias clases en C++: miembros, constructor y métodos const, con una cuenta bancaria que admite ingresos y reintegros.

C++ · Clases y métodos const en DMarlon Studio: el código del ejemplo y su salida en la terminal

Una clase junta unos datos con las funciones que trabajan con ellos. BankAccount tiene dos miembros, owner y balance, y tres métodos: deposit, withdraw y print. Con public: todo queda accesible desde fuera (en la lección siguiente verá cómo ocultarlo). Cada variable de este tipo, como ana o luis, es un objeto con sus propios datos.

El constructor se llama igual que la clase y no devuelve nada: se ejecuta cada vez que se crea un objeto. BankAccount ana("Ana", 120.0); lo llama con el titular y el saldo inicial, y dentro se guardan en los miembros.

Los métodos se llaman con un punto: ana.deposit(30.5) suma al saldo de Ana y no toca el de Luis. withdraw comprueba antes si hay dinero suficiente: Luis no puede sacar 60 de sus 40 euros (devuelve false), pero sí 25, y le quedan 15.

La palabra `const` detrás de print() promete que el método no cambia el objeto. Importa porque una referencia const, como view, solo deja llamar a métodos const: view.print() funciona, pero view.deposit(5) no compilaría. Marque como const todo método que solo lea.

En DMarlon Studio, C++ es el lenguaje de las aplicaciones de escritorio nativas con FLTK, y estas mismas clases son su base. Este programa se ejecuta tal cual con el destino Consola: pulse F9.

Código · main.cpp

#include <iostream>#include <string>// A class groups data (members) with the functions that work on it.class BankAccount {public:    std::string owner;    double balance;    // Constructor: runs every time an account is created.    BankAccount(std::string name, double initial) {        owner = name;        balance = initial;    }    void deposit(double amount) { balance += amount; }    bool withdraw(double amount) {        if (amount > balance) return false;   // not enough money        balance -= amount;        return true;    }    // const: this method promises not to change the object.    void print() const { std::cout << owner << ": " << balance << " EUR\n"; }};int main() {    BankAccount ana("Ana", 120.0);    BankAccount luis("Luis", 40.0);    ana.deposit(30.5);    std::cout << "Luis withdraws 60? " << (luis.withdraw(60) ? "yes" : "no") << "\n";    std::cout << "Luis withdraws 25? " << (luis.withdraw(25) ? "yes" : "no") << "\n";    ana.print();    luis.print();    const BankAccount& view = ana;   // read-only: only const methods are allowed    view.print();                    // view.deposit(5) would not compile}

Salida · c++ -std=c++17 main.cpp -o main && ./main

Luis withdraws 60? no
Luis withdraws 25? yes
Ana: 150.5 EUR
Luis: 15 EUR
Ana: 150.5 EUR

Para recordar

  • Una clase agrupa miembros (datos) y métodos (funciones).
  • El constructor lleva el nombre de la clase y prepara cada objeto nuevo.
  • objeto.metodo() trabaja con los datos de ese objeto.
  • Un método const no cambia el objeto y se puede llamar desde una referencia const.
  • La clase termina con };: no olvide el punto y coma.

Ejercicio

Añada un método transfer(BankAccount& to, double amount) que use withdraw y, si sale bien, llame a to.deposit(amount). Pase 50 euros de Ana a Luis y escriba las dos cuentas.