Menu
CoddyTech

Constructor con parámetros

Parte de la sección Programación Orientada a Objetos del Journey de C++ de Coddy. Lección 19 de 104.

Un constructor parametrizado acepta argumentos que te permiten inicializar un objeto con valores específicos en el momento de su creación. En lugar de depender de valores predeterminados, puedes personalizar el estado inicial de cada objeto.

class Player {
    std::string name;
    int health;
    int level;
public:
    Player(std::string n, int h, int lvl) {
        name = n;
        health = h;
        level = lvl;
    }
};

Player hero("Archer", 100, 5);
Player mage("Wizard", 80, 7);

Puedes definir varios constructores parametrizados con distintas listas de parámetros. Esto se denomina sobrecarga de constructores, y el compilador selecciona el adecuado según los argumentos que proporciones.

class Rectangle {
    int width, height;
public:
    Rectangle(int side) {          // Cuadrado
        width = height = side;
    }
    
    Rectangle(int w, int h) {      // Rectángulo
        width = w;
        height = h;
    }
};

Rectangle square(10);        // Llama al primer constructor
Rectangle rect(10, 20);      // Llama al segundo constructor

Los parámetros pueden tener valores predeterminados, lo que hace que algunos argumentos sean opcionales. Esto reduce la necesidad de tener varios constructores sobrecargados.

class Enemy {
    std::string type;
    int damage;
public:
    Enemy(std::string t, int d = 10) : type(t), damage(d) {}
};

Enemy goblin("Goblin");       // damage tiene 10 como valor predeterminado
Enemy dragon("Dragon", 50);   // damage se establece en 50

Recuerda lo aprendido en la lección anterior: una vez que defines un constructor con parámetros, el compilador ya no genera automáticamente un constructor predeterminado. Si necesitas ambos, debes definir explícitamente el constructor predeterminado.

challenge icon

Desafío

Fácil

Vamos a crear un sistema de inventario de productos que demuestre cómo los constructores parametrizados permiten crear objetos con valores iniciales específicos y cómo la sobrecarga de constructores aporta flexibilidad a la creación de objetos.

Crearás dos archivos para organizar tu código:

  • Product.h: Define una clase Product que represente artículos de un inventario. Tu clase debe tener:
    • Atributos privados para name (cadena), price (número de punto flotante) y quantity (entero)
    • Un constructor que reciba los tres parámetros (name, price, quantity) para inicializar completamente un producto
    • Un constructor que reciba solo name y price, con quantity establecido en 1 de forma predeterminada
    • Un constructor que reciba solo un name, con price establecido en 0.0 y quantity establecido en 0 de forma predeterminada
    • Un método display() que imprima la información del producto con este formato: "<name>: $<price> (x<quantity>)"
    • Un método getTotalValue() que devuelva price multiplicado por quantity
  • main.cpp: Demuestra los tres constructores leyendo la entrada y creando productos de distintas maneras. Lee lo siguiente de la entrada:
    • Primera línea: el nombre, el precio y la cantidad de un producto (separados por espacios)
    • Segunda línea: el nombre y el precio de un producto (separados por espacios)
    • Tercera línea: solo el nombre de un producto
    Crea tres objetos Product usando el constructor adecuado para cada entrada, llama a display() para cada uno y, después, imprime el valor total de los tres productos combinados con este formato: "Total inventory value: $<value>"

Para mostrar el precio, usa dos cifras decimales. Por ejemplo, si creas un producto "Laptop" con un precio de 999.99 y una cantidad de 5, la visualización debe mostrar "Laptop: $999.99 (x5)".

Incluye tu archivo de encabezado en main.cpp usando #include "Product.h".

Pruébalo tú mismo

#include <iostream>
#include <iomanip>
#include <string>
#include "Product.h"

using namespace std;

int main() {
    // Lee el primer producto: nombre, precio y cantidad
    string name1;
    double price1;
    int quantity1;
    cin >> name1 >> price1 >> quantity1;
    
    // Lee el segundo producto: nombre y precio
    string name2;
    double price2;
    cin >> name2 >> price2;
    
    // Lee el tercer producto: solo el nombre
    string name3;
    cin >> name3;
    
    // TODO: Crea tres objetos Product usando el constructor adecuado para cada uno
    
    // TODO: Llama a display() para cada producto
    
    // TODO: Calcula e imprime el valor total del inventario
    // Formato: "Total inventory value: $<value>"
    // Usa fixed y setprecision(1) para mostrar un decimal
    
    return 0;
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de C++ online