Menu
CoddyTech

Konstruktor Berparameter

Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan C++ di Coddy. Pelajaran 19 dari 104.

constructor berparameter menerima argumen yang memungkinkan kamu menginisialisasi object dengan nilai tertentu saat dibuat. Alih-alih mengandalkan nilai default, kamu dapat menyesuaikan keadaan awal setiap object.

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

Kamu dapat mendefinisikan beberapa konstruktor berparameter dengan daftar parameter yang berbeda. Ini disebut overloading konstruktor, dan compiler memilih konstruktor yang sesuai berdasarkan argumen yang kamu berikan.

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

Rectangle square(10);        // Memanggil konstruktor pertama
Rectangle rect(10, 20);      // Memanggil konstruktor kedua

Parameter dapat memiliki nilai default, sehingga beberapa argumen bersifat opsional. Ini mengurangi kebutuhan akan beberapa constructor yang di-overload.

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

Enemy goblin("Goblin");       // damage bernilai default 10
Enemy dragon("Dragon", 50);   // damage diatur ke 50

Ingat dari pelajaran sebelumnya: setelah kamu mendefinisikan constructor berparameter, compiler tidak lagi membuat default constructor secara otomatis. Jika kamu membutuhkan keduanya, kamu harus mendefinisikan default constructor secara eksplisit.

challenge icon

Tantangan

Mudah

Mari kita buat sistem inventaris produk yang menunjukkan cara constructor berparameter memungkinkan kamu membuat object dengan nilai awal tertentu, serta cara overloading constructor memberikan fleksibilitas dalam pembuatan object.

Kamu akan membuat dua file untuk mengatur kodemu:

  • Product.h: Definisikan class Product yang merepresentasikan barang dalam inventaris. Class-mu harus memiliki:
    • Atribut privat untuk name (string), price (double), dan quantity (bilangan bulat)
    • Constructor yang menerima ketiga parameter (name, price, quantity) untuk menginisialisasi produk sepenuhnya
    • Constructor yang hanya menerima name dan price, dengan quantity yang secara default bernilai 1
    • Constructor yang hanya menerima name, dengan price yang secara default bernilai 0.0 dan quantity yang secara default bernilai 0
    • Method display() yang mencetak informasi produk dalam format: "<name>: $<price> (x<quantity>)"
    • Method getTotalValue() yang mengembalikan hasil perkalian price dengan quantity
  • main.cpp: Tunjukkan cara menggunakan ketiga constructor dengan membaca input dan membuat produk melalui berbagai cara. Baca data berikut dari input:
    • Baris pertama: nama produk, price, dan quantity (dipisahkan dengan spasi)
    • Baris kedua: nama produk dan price (dipisahkan dengan spasi)
    • Baris ketiga: hanya nama produk
    Buat tiga object Product dengan menggunakan constructor yang sesuai untuk setiap input, panggil display() pada masing-masing object, lalu cetak total nilai gabungan ketiga produk dalam format: "Total inventory value: $<value>"

Untuk output price, tampilkan dua angka di belakang koma. Misalnya, jika kamu membuat produk "Laptop" dengan price 999.99 dan quantity 5, tampilan yang dihasilkan harus menunjukkan "Laptop: $999.99 (x5)".

Sertakan header file-mu di main.cpp dengan menggunakan #include "Product.h".

Coba sendiri

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

using namespace std;

int main() {
    // Baca produk pertama: nama, harga, dan jumlah
    string name1;
    double price1;
    int quantity1;
    cin >> name1 >> price1 >> quantity1;
    
    // Baca produk kedua: nama dan harga
    string name2;
    double price2;
    cin >> name2 >> price2;
    
    // Baca produk ketiga: hanya nama
    string name3;
    cin >> name3;
    
    // TODO: Buat tiga object Product menggunakan constructor yang sesuai untuk masing-masing
    
    // TODO: Panggil display() pada setiap produk
    
    // TODO: Hitung dan cetak total nilai persediaan
    // Format: "Total inventory value: $<value>"
    // Gunakan fixed dan setprecision(1) untuk satu angka di belakang koma
    
    return 0;
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Object

Latihan sendiri: Compiler C++ online