Penggabungan Fungsi C++ Dijelaskan – Contoh Praktik dan Praktik Terbaik
Penggabungan Fungsi C++ Dijelaskan
Panduan ini mengungkapkan penggabungan fungsi dalam C++, memberikan contoh yang jelas, praktik terbaik, dan walkthrough langkah demi langkah yang akan digunakan oleh pengembang C++ berpengalaman dalam produksi.
Mengapa Penggabungan Fungsi Penting
Dalam pemrograman berorientasi objek, warisan memungkinkan kelas turunan untuk memperluas atau memodifikasi perilaku kelas dasar. Ketika fungsi anggota yang sama dideklarasikan di kelas dasar dan kelas turunan, implementasi turunan “menggantikan” yang dasar. Ketika Anda memanggil fungsi tersebut melalui objek kelas turunan, versi yang digantikan akan dijalankan.
Contoh 1: Penggabungan Dasar
#include <iostream> using namespace std; class Base { public: void print() { cout << "Fungsi Dasar" << endl; } }; class Derived : public Base { public: void print() { cout << "Fungsi Turunan" << endl; } }; int main() { Derived d; d.print(); return 0; }
Output
Fungsi Turunan
Memanggil print() pada instance Derived mengeksekusi fungsi yang digantikan, bukan versi dasar.
Jika Anda membuat objek Base dan memanggil print(), Anda akan melihat implementasi dasar asli.
Base b; b.print(); // Output: Fungsi Dasar
Mengakses Fungsi Dasar yang Digantikan
Kadang Anda perlu memanggil versi kelas dasar secara eksplisit. Dua teknik umum adalah:
Menggunakan operator resolusi cakupan ::.
Menggunakan pointer kelas dasar yang menunjuk ke objek turunan (ketika fungsi bukan virtual).
Contoh 2: Resolusi Cakupan untuk Memanggil Fungsi Dasar
#include <iostream> using namespace std; class Base { public: void print() { cout << "Fungsi Dasar" << endl; } }; class Derived : public Base { public: void print() { cout << "Fungsi Turunan" << endl; } }; int main() { Derived d1, d2; d1.print(); d2.Base::print(); // Panggil eksplisit ke Base::print return 0; }
Output
Fungsi Turunan Fungsi Dasar
Contoh 3: Memanggil Fungsi Dasar dari Dalam Turunan
#include <iostream> using namespace std; class Base { public: void print() { cout << "Fungsi Dasar" << endl; } }; class Derived : public Base { public: void print() { cout << "Fungsi Turunan" << endl; Base::print(); // Panggil versi dasar } }; int main() { Derived d; d.print(); return 0; }
Output
Fungsi Turunan Fungsi Dasar
Contoh 4: Menggunakan Pointer Dasar untuk Mengakses Fungsi Dasar
#include <iostream> using namespace std; class Base { public: void print() { cout << "Fungsi Dasar" << endl; } }; class Derived : public Base { public: void print() { cout << "Fungsi Turunan" << endl; } }; int main() { Derived d; Base* ptr = &d; // Pointer Dasar yang menunjuk ke objek Turunan ptr->print(); // Memanggil Base::print karena fungsi bukan virtual return 0; }
Output
Fungsi Dasar
Ketika fungsi tidak dideklarasikan virtual, pointer kelas dasar memanggil implementasi dasar. Untuk mencapai perilaku polimorfisme yang sebenarnya, deklarasikan fungsi dasar virtual dan ganti di kelas turunan.
Contoh-contoh ini mengilustrasikan mekanika penggabungan fungsi dalam C++. Dengan menguasai konsep ini, Anda dapat menulis kode yang lebih bersih, lebih mudah dipelihara yang memanfaatkan polimorfisme secara efektif.