Lompati ke konten utama
Modul 6 · Pelajaran 2 dari 214/18 dalam kursus~15 min
Pelajaran modul (2/2)

Polimorfisme dan fungsi virtual

Polimorfisme memungkinkan kita memperlakukan objek dari kelas turunan yang berbeda melalui pointer atau referensi ke kelas dasarnya, memastikan versi metode yang benar dipanggil saat runtime (Late Binding).

Fungsi Virtual: virtual dan override

Untuk mengaktifkan polimorfisme pada suatu metode, kita harus mendeklarasikannya menggunakan kata kunci virtual di dalam kelas dasar. Di kelas turunan, kami menggunakan penentu override untuk secara eksplisit menyatakan bahwa kami mengganti metode tersebut.

C++
class Employee {
public:
    virtual void work() {
        std::cout << "Generic work" << std::endl;
    }
    // IMPORTANT: Virtual destructor in base class to avoid memory leaks
    virtual ~Employee() = default;
};

class Developer : public Employee {
public:
    void work() override {
        std::cout << "Writing C++ code" << std::endl;
    }
};

Menggunakan pointer ke kelas dasar, C++ akan menyelesaikan metode yang benar saat runtime:

C++
Employee* emp = new Developer();
emp->work(); // Prints "Writing C++ code" instead of "Generic work"
delete emp;

Kelas Abstrak dan Fungsi Virtual Murni

Fungsi virtual murni adalah fungsi anggota virtual yang dideklarasikan dengan = 0 di akhir. Ini mewakili kontrak formal: kelas dasar tidak memberikan implementasi, mendelegasikannya sepenuhnya ke subkelas.

Kelas yang berisi setidaknya satu fungsi virtual murni disebut Kelas Abstrak dan tidak dapat dipakai secara langsung.

C++
class Instrument {
public:
    virtual void play() = 0; // Pure virtual
    virtual ~Instrument() = default;
};

class Piano : public Instrument {
public:
    void play() override {
        std::cout << "Playing piano..." << std::endl;
    }
};

Cobalah sendiri

Latihan#cpp.m6.l2.e1
Upaya: 0Memuat…

Tentukan metode virtual makeSound() di Hewan yang mencetak 'Beberapa suara'. Kemudian timpa di kelas Cat menggunakan penentu override untuk mencetak 'Meow'.

Memuat editor…
Tunjukkan petunjuk

Ingatlah untuk menambahkan `virtual` ke metode kelas dasar dan menempatkan `override` setelah tanda kurung parameter di kelas turunan.

Solusi tersedia setelah 3 upaya

Latihan#cpp.m6.l2.e2
Upaya: 0Memuat…

Deklarasikan fungsi virtual murni print() yang mengembalikan void dalam kelas abstrak Printable. Kemudian buat kelas Dokumen yang diwarisi secara publik dari Printable dan implementasikan metode print() untuk mencetak 'Pencetakan Dokumen'.

Memuat editor…
Tunjukkan petunjuk

Fungsi virtual murni dideklarasikan dengan tanda tangan `virtual void print() = 0;`. Pastikan `Dokumen` mewarisi secara publik dari `Dapat Dicetak`.

Solusi tersedia setelah 3 upaya