Konstruktor Default
Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan C++ di Coddy. Pelajaran 18 dari 104.
konstruktor default adalah konstruktor yang dapat dipanggil tanpa argumen. Konstruktor ini menginisialisasi object saat tidak ada nilai awal yang diberikan. Setiap class memerlukan cara untuk membuat object dalam keadaan default yang valid.
Jika kamu tidak mendefinisikan konstruktor apa pun, compiler menghasilkan konstruktor default implisit yang tidak melakukan apa pun untuk tipe primitif dan memanggil konstruktor default untuk object anggota.
class Player {
int health;
int score;
public:
Player() { // Konstruktor bawaan
health = 100;
score = 0;
}
};
Player p1; // Memanggil konstruktor bawaan
Player p2{}; // Juga memanggil konstruktor bawaanSetelah kamu mendefinisikan constructor apa pun (seperti constructor berparameter), compiler tidak lagi membuat constructor default. Kamu harus mendefinisikannya secara eksplisit jika masih membutuhkannya.
class Enemy {
int damage;
public:
Enemy(int d) : damage(d) {} // Hanya ada konstruktor berparameter
};
Enemy e1(10); // Berfungsi
Enemy e2; // error! Tidak ada konstruktor bawaanDalam C++ modern, kamu dapat meminta secara eksplisit konstruktor default yang dibuat oleh compiler menggunakan = default:
class Item {
int id;
public:
Item() = default; // Compiler membuat konstruktor bawaan
Item(int i) : id(i) {}
};Konstruktor default penting untuk membuat array berisi object dan untuk class yang digunakan dalam container seperti std::vector, yang mungkin perlu membuat elemen tanpa argumen.
Tantangan
MudahMari kita buat sistem penghitung sederhana yang menunjukkan cara konstruktor default menginisialisasi object ke keadaan awal yang valid.
Kamu akan membuat dua file untuk mengatur kodemu:
Counter.h: Definisikan classCounteryang melacak nilai hitungan. Class-mu harus memiliki:- Atribut
countprivat (integer) - Atribut
nameprivat (string) untuk mengidentifikasi penghitung - Konstruktor default yang menginisialisasi
countdengan0dannamedengan"Unnamed", lalu mencetak"Counter created: <name>" - Method
increment()yang menambah hitungan sebanyak 1 - Method
getCount()yang mengembalikan hitungan saat ini - Method
getName()yang mengembalikan nama penghitung
- Atribut
main.cpp: Tunjukkan bahwa konstruktor default berfungsi saat membuat object dengan berbagai cara. Baca angka dari input yang menunjukkan berapa kali penghitung harus ditambah, lalu:- Buat Counter menggunakan inisialisasi langsung:
Counter c1; - Buat Counter lain menggunakan inisialisasi kurung kurawal:
Counter c2{}; - Tambah nilai
c1sebanyak yang ditentukan oleh input - Cetak
"<name>: <count>"untuk c1 - Cetak
"<name>: <count>"untuk c2
- Buat Counter menggunakan inisialisasi langsung:
Kedua penghitung harus dimulai dari 0 berkat konstruktor default-mu, tetapi hanya c1 yang akan ditambah nilainya. Ini menunjukkan cara konstruktor default memastikan setiap object dimulai dalam keadaan yang dapat diprediksi dan valid, terlepas dari cara object tersebut dibuat.
Sertakan file header-mu di main.cpp menggunakan #include "Counter.h".
Coba sendiri
#include <iostream>
#include "Counter.h"
using namespace std;
int main() {
// Baca berapa kali nilai harus ditambah
int n;
cin >> n;
// TODO: Buat Counter dengan inisialisasi langsung: Counter c1;
// TODO: Buat Counter lain dengan inisialisasi kurung kurawal: Counter c2{};
// TODO: Tambah nilai c1 sebanyak n kali
// TODO: Cetak "<name>: <count>" untuk c1
// TODO: Cetak "<name>: <count>" untuk c2
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