Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> Bahasa C

Menguasai Fungsi Virtual C++: Konsep, Contoh, dan Kata Kunci Override

Fungsi Virtual C++

Tutorial ini menjelaskan fungsi virtual C++, tujuannya, dan penggunaan praktis yang diilustrasikan dengan contoh kode.

Fungsi virtual adalah anggota kelas dasar yang diharapkan akan digantikan oleh kelas turunan. Mendeklarasikan fungsi sebagai virtual memastikan bahwa implementasi paling turunan dipanggil, bahkan ketika diakses melalui pointer atau referensi kelas dasar.

Ketika kelas dasar memiliki anggota non-virtual, memanggil anggota tersebut melalui pointer dasar akan selalu mengeksekusi versi dasar, terlepas dari tipe objek aktual. Pertimbangkan berikut:

class Base { public: void print() { // implementasi dasar } }; class Derived : public Base { public: void print() { // implementasi turunan } }; 

Dalam program di bawah ini, sebuah Base* menunjuk ke instance Derived, namun print() menyelesaikan ke versi dasar:

int main() { Derived derived1; Base* base1 = &derived1; base1->print(); // memanggil Base::print() return 0; } 

Untuk mencapai perilaku polimorfisme, deklarasikan fungsi sebagai virtual di kelas dasar:

class Base { public: virtual void print() { // implementasi dasar } }; 

Fungsi virtual adalah pusat dari polimorfisme C++. Untuk mendalami lebih lanjut, lihat panduan Polimorfisme C++ kami.


Contoh 1: Penggunaan Dasar Fungsi Virtual

#include <iostream> using namespace std; class Base { public: virtual void print() { cout << "Fungsi Dasar" << endl; } }; class Derived : public Base { public: void print() override { cout << "Fungsi Turunan" << endl; } }; int main() { Derived derived1; Base* base1 = &derived1; base1->print(); // mencetak Fungsi Turunan return 0; } 

Output

Fungsi Turunan

Karena Base::print adalah virtual, pangkalan dispatch ke Derived::print bahkan melalui pointer dasar.

Menguasai Fungsi Virtual C++: Konsep, Contoh, dan Kata Kunci Override

Kata Kunci Override C++

Sejak C++11, kata kunci override membantu mencegah penggantian yang tidak sengaja dengan memaksa kompiler untuk memverifikasi bahwa fungsi benar-benar menggantikan anggota virtual dasar.

Contoh:

class Base { public: virtual void print() { // implementasi dasar } }; class Derived : public Base { public: void print() override { // implementasi turunan } }; 

Jika Anda mendefinisikan fungsi pengganti di luar kelas, gunakan:

class Derived : public Base { public: void print() override; // deklarasi }; void Derived::print() { // implementasi } 

Menggunakan override dengan Aman

Tanpa override, kesalahan ketik atau ketidakcocokan tanda tangan secara diam-diam menghasilkan fungsi baru daripada pengganti, yang mengakibatkan bug yang halus. Kompiler kemudian akan mengeluarkan kesalahan, sehingga masalah segera terlihat. Jebakan umum meliputi:


Penggunaan Praktis Fungsi Virtual

Pertimbangkan kelas dasar Animal dengan kelas turunan Dog dan Cat. Setiap kelas memiliki anggota type yang diinisialisasi oleh konstruktor.

class Animal { private: string type; public: Animal() : type("Animal") {} virtual string getType() const { return type; } }; class Dog : public Animal { private: string type; public: Dog() : type("Dog") {} string getType() const override { return type; } }; class Cat : public Animal { private: string type; public: Cat() : type("Cat") {} string getType() const override { return type; } }; 

Dengan getType() virtual, satu fungsi pembantu dapat mencetak setiap hewan:

void print(Animal* ani) { cout << "Hewan: " << ani->getType() << endl; } 

Penggunaan di dalam main():

int main() { Animal* animal1 = new Animal(); Animal* dog1 = new Dog(); Animal* cat1 = new Cat(); print(animal1); print(dog1); print(cat1); delete animal1; delete dog1; delete cat1; return 0; } 

Output

Hewan: Hewan Hewan: Dog Hewan: Cat

Dengan membuat getType() virtual, kita menghindari duplikasi logika print() di setiap kelas turunan dan memastikan bahwa type yang benar diakses.


Bahasa C

  1. Cara Meneruskan Array ke Fungsi dalam C++: Panduan Praktis
  2. Kelas & Objek C++: Panduan Praktis Pemrograman Berorientasi Objek
  3. Fungsi Teman dan Kelas Teman C++: Menguasai Kontrol Akses
  4. Menguasai Template Kelas C++: Panduan Praktis
  5. Fungsi C++ Dijelaskan dengan Contoh Kode Praktis
  6. Menguasai Fungsi Verilog untuk Desain RTL yang Efisien
  7. Menguasai Fungsi C: Struktur, Deklarasi, dan Praktik Terbaik
  8. Memahami Kelas Penyimpanan C++: Cakupan, Umur, dan Penggunaan
  9. Menguasai Overloading C++: Fungsi & Operator Dijelaskan
  10. Memahami Polimorfisme C++: Panduan Praktis