Dalam tutorial ini, kita akan belajar tentang function overriding di C ++ dengan bantuan contoh.
Seperti yang kita ketahui, inheritance adalah fitur OOP yang memungkinkan kita membuat kelas turunan dari kelas dasar. Kelas turunan mewarisi fitur dari kelas dasar.
Misalkan, fungsi yang sama didefinisikan di kelas turunan dan kelas berbasis. Sekarang jika kita memanggil fungsi ini menggunakan objek dari kelas turunan, fungsi kelas turunan akan dieksekusi.
Ini dikenal sebagai penggantian fungsi di C ++. Fungsi di kelas turunan menggantikan fungsi di kelas dasar.
Contoh 1: Penggantian Fungsi C ++
// C++ program to demonstrate function overriding #include using namespace std; class Base ( public: void print() ( cout << "Base Function" << endl; ) ); class Derived : public Base ( public: void print() ( cout << "Derived Function" << endl; ) ); int main() ( Derived derived1; derived1.print(); return 0; )
Keluaran
Fungsi Turunan
Di sini, fungsi yang sama print()
didefinisikan di kedua kelas Base
dan Derived
.
Jadi, saat kita memanggil print()
dari Derived
objek turunan1, print()
dari Derived
dieksekusi dengan mengganti fungsi di Base
.
![](https://cdn.wiki-base.com/1143898/c_function_overriding.png.webp)
Akses Fungsi yang Diganti di C ++
Untuk mengakses fungsi yang diganti dari kelas dasar, kami menggunakan operator resolusi cakupan ::
.
Kita juga dapat mengakses fungsi yang ditimpa dengan menggunakan penunjuk kelas dasar untuk menunjuk ke objek dari kelas turunan dan kemudian memanggil fungsi dari penunjuk tersebut.
Contoh 2: C ++ Access Overridden Function ke Base Class
// C++ program to access overridden function // in main() using the scope resolution operator :: #include using namespace std; class Base ( public: void print() ( cout << "Base Function" << endl; ) ); class Derived : public Base ( public: void print() ( cout << "Derived Function" << endl; ) ); int main() ( Derived derived1, derived2; derived1.print(); // access print() function of the Base class derived2.Base::print(); return 0; )
Keluaran
Fungsi Dasar Fungsi Turunan
Ini, pernyataan ini
derived2.Base::print();
mengakses print()
fungsi kelas Basis.
![](https://cdn.wiki-base.com/1143898/c_function_overriding_2.png.webp)
Contoh 3: C ++ Call Overridden Function From Derived Class
// C++ program to call the overridden function // from a member function of the derived class #include using namespace std; class Base ( public: void print() ( cout << "Base Function" << endl; ) ); class Derived : public Base ( public: void print() ( cout << "Derived Function" << endl; // call overridden function Base::print(); ) ); int main() ( Derived derived1; derived1.print(); return 0; )
Keluaran
Fungsi Dasar Fungsi Turunan
Dalam program ini, kami telah memanggil fungsi yang ditimpa di dalam Derived
kelas itu sendiri.
class Derived : public Base ( public: void print() ( cout << "Derived Function" << endl; Base::print(); ) );
Perhatikan kodenya Base::print();
, yang memanggil fungsi yang diganti di dalam Derived
kelas.
![](https://cdn.wiki-base.com/1143898/c_function_overriding_3.png.webp)
Contoh 4: C ++ Call Overridden Function Menggunakan Pointer
// C++ program to access overridden function using pointer // of Base type that points to an object of Derived class #include using namespace std; class Base ( public: void print() ( cout << "Base Function" << endl; ) ); class Derived : public Base ( public: void print() ( cout << "Derived Function"
Output
Base Function
In this program, we have created a pointer of
Base
type named ptr. This pointer points to the Derived
object derived1.
// pointer of Base type that points to derived1 Base* ptr = &derived1;
When we call the
print()
function using ptr, it calls the overridden function from Base
.
// call function of Base class using ptr ptr->print();
This is because even though ptr points to a
Derived
object, it is actually of Base
type. So, it calls the member function of Base
.
In order to override the
Base
function instead of accessing it, we need to use virtual functions in the Base
class.