Fungsi Virtual dan vtable
Implementasikan polimorfisme saat berjalan dengan fungsi virtual dan telaah konsep vtable
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.
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
- Pewarisan Tunggal dan Jamak
- Fungsi Virtual dan vtable
- Class Abstrak dan Metode Virtual Murni
- Kompromi Pewarisan vs Komposisi