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 keduaParameter 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 50Ingat 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.
Tantangan
MudahMari 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 classProductyang merepresentasikan barang dalam inventaris. Class-mu harus memiliki:- Atribut privat untuk
name(string),price(double), danquantity(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.0dan quantity yang secara default bernilai0 - Method
display()yang mencetak informasi produk dalam format:"<name>: $<price> (x<quantity>)" - Method
getTotalValue()yang mengembalikan hasil perkalian price dengan quantity
- Atribut privat untuk
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
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;
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Object
1Dasar-Dasar OOP
File EksternalBuild dan Kompilasi C++File Header dan File SourceNamespace dan CakupanPengantar OOP dalam C++class vs objectPointer 'this'method (Fungsi Anggota)Atribut (Anggota Data)Dasar Ctor dan DtorRingkasan: Kalkulator Sederhana4Properti class
Anggota instance vs staticGetter dan setterFungsi anggota constKata kunci mutableMethod dan variabel staticFungsi dan class friendRangkuman, Pengelola Rekening Bank7Pewarisan
Pewarisan DasarTingkat Akses pada PewarisanUrutan Pemanggilan Ctor & DtorPenimpaan methodFungsi Virtual & VTablePewarisan BergandaPewarisan VirtualRangkuman: Hierarki Karyawan2Manajemen Memori
Memori Stack vs HeapPointer dan ReferenceMemori Dinamis (new/delete)Smart Pointer di C++RAII di C++Rangkuman: Pengelola Array Dinamis5Enkapsulasi
Penentu Akses dalam C++Penentu Akses secara MendalamPenyembunyian Informasistruct vs classNested dan Inner classRangkuman, Sistem Catatan Siswa8Polimorfisme
Polimorfisme saat Compile vs RuntimeOverloading FungsiMeninjau Kembali Fungsi VirtualFungsi Virtual MurniKelas AbstrakDesain Interface di C++Casting Dinamis & RTTIRangkuman: Kalkulator Bentuk3Konstruktor & Destruktor
Konstruktor DefaultKonstruktor BerparameterKonstruktor SalinKonstruktor PindahDaftar Inisialisasi KonstruktorKonstruktor DelegasiKupas Tuntas DestruktorAturan Tiga, Lima, dan NolRangkuman: class String6Overloading Operator
Pengantar Overloading OperatorOverloading Operator AritmetikaOverloading Operator PerbandinganOperator StreamOverloading Operator PenugasanOverloading Operator [] dan ()Operator Konversi TipeRingkasan, class Matrix9Template
Template FungsiTemplate classSpesialisasi TemplateTemplate VariadikDasar SFINAE & Type TraitsRangkuman, Container GenerikLatihan sendiri: Compiler C++ online