C++ Academy · Pelajaran

Fungsi Virtual dan vtable

Implementasikan polimorfisme saat berjalan dengan fungsi virtual dan telaah konsep vtable

Pelajaran 2 dari 414 langkah

Fungsi Virtual dan vtable adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C++ Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C++ Academy mencakup 4 pelajaran total.

Pengikatan Statis vs Dinamis

Secara bawaan, pemanggilan anggota terikat secara statis — kompilator memilih fungsi berdasarkan tipe yang dideklarasikan. Dengan fungsi virtual, pemanggilan terikat secara dinamis berdasarkan tipe sebenarnya.

Mendeklarasikan Fungsi virtual

Tandai fungsi dengan virtual di kelas dasar. Kelas turunan dapat menimpanya.

class Shape {
public:
    virtual double area() const = 0;        // pure virtual
    virtual ~Shape() = default;
};

class Circle : public Shape {
    double r_;
public:
    Circle(double r) : r_(r) {}
    double area() const override { return 3.14159 * r_ * r_; }
};

Penentu override

Tambahkan override ke metode kelas turunan. Kompilator memverifikasi bahwa fungsi tersebut benar-benar menimpa fungsi virtual — sehingga kesalahan ketik pada tanda tangan fungsi dapat terdeteksi.

Penentu final

final mencegah penimpaan lebih lanjut. Gunakan pada kelas yang tidak boleh diwariskan atau pada metode yang tidak boleh ditimpa lagi.

class Concrete final : public Base { /* ... */ };
class Base {
    virtual void f() final;   // cannot be overridden
};

Memanggil melalui Penunjuk Kelas Dasar

Inilah keunggulan polimorfisme: penunjuk kelas dasar dapat meneruskan pemanggilan ke metode kelas turunan yang tepat.

Shape* s = new Circle(3.0);
std::cout << s->area();   // 28.27... (Circle::area)
delete s;

Konsep Tabel Virtual

Setiap kelas polimorfik memiliki tabel fungsi virtual tersembunyi. Setiap objek menyimpan penunjuk tersembunyi ke tabel fungsi virtual kelasnya.

Biaya Pemanggilan Virtual

Pemanggilan virtual memerlukan satu tingkat indireksi tambahan melalui tabel fungsi virtual. Dalam sebagian besar kode, biayanya dapat diabaikan. Hindari dalam loop bagian dalam jika hasil pengukuran menunjukkan bahwa pemanggilan tersebut menjadi hambatan.

Fungsi Virtual Murni

Tambahkan = 0 untuk menjadikan fungsi sebagai virtual murni. Kelas turunan harus menimpanya agar dapat dibuat sebagai instans. Kelas tersebut menjadi abstrak.

Destruktor Virtual

Jika sebuah kelas memiliki fungsi virtual atau akan dihapus melalui penunjuk kelas dasar, berikan destruktor virtual. Jika tidak, destruktor kelas turunan tidak pernah dijalankan.

class Base {
public:
    virtual ~Base() = default;   // safe to delete through Base*
};

Polimorfisme dengan Penunjuk Cerdas

Simpan objek polimorfik melalui penunjuk cerdas ke kelas dasar. Penunjuk cerdas menangani penghancuran objek dengan benar.

std::unique_ptr<Shape> s = std::make_unique<Circle>(3.0);

Meninjau Kembali Pemotongan

Meneruskan objek turunan berdasarkan nilai ke fungsi yang mengharapkan kelas dasar akan memotong bagian turunan. Gunakan referensi atau penunjuk untuk parameter polimorfik.

Pertukaran Performa

Fungsi virtual menambahkan fleksibilitas dengan biaya waktu berjalan yang kecil. Templat menawarkan polimorfisme waktu kompilasi tanpa biaya waktu berjalan — pilih berdasarkan apakah polimorfisme diperlukan saat program berjalan.

Pemeriksaan Singkat

Mengapa kelas dasar polimorfik harus memiliki destruktor virtual?

Ringkasan

Fungsi virtual memungkinkan polimorfisme waktu berjalan melalui tabel fungsi virtual per kelas. Tandai penimpaan dengan override dan cegah pewarisan lebih lanjut dengan final. Selalu berikan destruktor virtual kepada kelas dasar polimorfik.

Gratis untuk memulai

Belajar C++ dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
51
Pelajaran
203

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Fungsi Virtual dan vtable” gratis?

Ya — teks lengkap “Fungsi Virtual dan vtable” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C++ Academy, upgrade ke CoddyKit PRO. Kursus C++ Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Fungsi Virtual dan vtable”?

Implementasikan polimorfisme saat berjalan dengan fungsi virtual dan telaah konsep vtable Kamu berlatih C++ Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai C++ Academy?

Tidak diperlukan pengalaman sebelumnya. C++ Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Fungsi Virtual dan vtable” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran C++ Academy ini?

Ya. Setiap pelajaran C++ Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Pewarisan Tunggal dan Jamak
  2. Fungsi Virtual dan vtable
  3. Class Abstrak dan Metode Virtual Murni
  4. Kompromi Pewarisan vs Komposisi
← Kembali ke C++ Academy