Menu
Coddy logo textTech

Costruttore con parametri

Fa parte della sezione Programmazione orientata agli oggetti del percorso C++ di Coddy. Lezione 19 di 104.

Un costruttore parametrizzato accetta argomenti che ti consentono di inizializzare un oggetto con valori specifici al momento della creazione. Invece di affidarti ai valori predefiniti, puoi personalizzare lo stato iniziale di ogni oggetto.

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);

Puoi definire più costruttori parametrizzati con elenchi di parametri diversi. Questo si chiama sovraccarico dei costruttori e il compilatore seleziona quello appropriato in base agli argomenti che fornisci.

class Rectangle {
    int width, height;
public:
    Rectangle(int side) {          // Quadrato
        width = height = side;
    }
    
    Rectangle(int w, int h) {      // Rectangle
        width = w;
        height = h;
    }
};

Rectangle square(10);        // Chiama il primo costruttore
Rectangle rect(10, 20);      // Chiama il secondo costruttore

I parametri possono avere valori predefiniti, rendendo alcuni argomenti facoltativi. Questo riduce la necessità di avere più costruttori sovraccaricati.

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

Enemy goblin("Goblin");       // damage è impostato a 10 per impostazione predefinita
Enemy dragon("Dragon", 50);   // damage è impostato a 50

Ricorda dalla lezione precedente: una volta definito un costruttore con parametri, il compilatore non genera più automaticamente un costruttore predefinito. Se ti servono entrambi, devi definire esplicitamente il costruttore predefinito.

challenge icon

Sfida

Facile

Creiamo un sistema di inventario dei prodotti che mostra come i costruttori con parametri permettono di creare oggetti con valori iniziali specifici e come il sovraccarico dei costruttori offre flessibilità nella creazione degli oggetti.

Creerai due file per organizzare il codice:

  • Product.h: definisci una classe Product che rappresenta gli articoli di un inventario. La classe deve avere:
    • Attributi privati per name (stringa), price (double) e quantity (intero)
    • Un costruttore che accetta tutti e tre i parametri (name, price, quantity) per inizializzare completamente un prodotto
    • Un costruttore che accetta solo name e price, con quantity impostato per impostazione predefinita a 1
    • Un costruttore che accetta solo un name, con price impostato per impostazione predefinita a 0.0 e quantity impostato per impostazione predefinita a 0
    • Un metodo display() che stampa le informazioni sul prodotto nel formato: "<name>: $<price> (x<quantity>)"
    • Un metodo getTotalValue() che restituisce price moltiplicato per quantity
  • main.cpp: mostra tutti e tre i costruttori leggendo l'input e creando prodotti in modi diversi. Leggi dall'input:
    • Prima riga: nome, prezzo e quantità di un prodotto (separati da spazi)
    • Seconda riga: nome e prezzo di un prodotto (separati da spazi)
    • Terza riga: solo il nome di un prodotto
    Crea tre oggetti Product usando il costruttore appropriato per ciascun input, chiama display() su ciascuno, quindi stampa il valore totale dei tre prodotti combinati nel formato: "Total inventory value: $<value>"

Per la stampa del prezzo, visualizzalo con due cifre decimali. Per esempio, se crei un prodotto "Laptop" con prezzo 999.99 e quantità 5, la visualizzazione dovrebbe mostrare "Laptop: $999.99 (x5)".

Includi il file header in main.cpp usando #include "Product.h".

Provalo tu

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

using namespace std;

int main() {
    // Leggi il primo prodotto: nome, prezzo e quantità
    string name1;
    double price1;
    int quantity1;
    cin >> name1 >> price1 >> quantity1;
    
    // Leggi il secondo prodotto: nome e prezzo
    string name2;
    double price2;
    cin >> name2 >> price2;
    
    // Leggi il terzo prodotto: solo il nome
    string name3;
    cin >> name3;
    
    // TODO: Crea tre oggetti Product usando il costruttore appropriato per ciascuno
    
    // TODO: Chiama display() su ciascun prodotto
    
    // TODO: Calcola e stampa il valore totale dell'inventario
    // Formato: "Total inventory value: $<value>"
    // Usa fixed e setprecision(1) per ottenere una cifra decimale
    
    return 0;
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore C++ online