Fungsi C ++ Menimpa

Dalam tutorial ini, kita akan belajar mengenai fungsi yang berlebihan dalam C ++ dengan bantuan contoh.

Seperti yang kita ketahui, pewarisan adalah ciri OOP yang membolehkan kita membuat kelas turunan dari kelas asas. Kelas yang diturunkan mewarisi ciri kelas asas.

Katakan, fungsi yang sama ditakrifkan pada kelas turunan dan kelas berasaskan. Sekarang jika kita memanggil fungsi ini menggunakan objek kelas turunan, fungsi kelas turunan akan dijalankan.

Ini dikenali sebagai fungsi mengatasi di C ++. Fungsi dalam kelas turunan mengatasi fungsi di kelas asas.

Contoh 1: Fungsi C ++ Menimpa

 // 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; )

Pengeluaran

 Fungsi Berasal

Di sini, fungsi yang sama print()ditentukan dalam kedua Base- dua dan Derivedkelas.

Jadi, apabila kita panggil print()dari Derivedderived1 objek, print()daripada Deriveddisempurnakan oleh mengatasi fungsi dalam Base.

Mengendalikan fungsi mengatasi dalam C ++

Akses Fungsi Overridden di C ++

Untuk mengakses fungsi kelas asas yang diganti, kami menggunakan operator resolusi skop ::.

Kita juga dapat mengakses fungsi yang diganti dengan menggunakan penunjuk dari kelas dasar untuk menunjuk ke objek dari kelas yang berasal dan kemudian memanggil fungsi dari penunjuk itu.

Contoh 2: Akses C ++ Fungsi Terganti ke Kelas Asas

 // 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; )

Pengeluaran

 Fungsi Dasar Berasal

Di sini, penyataan ini

 derived2.Base::print();

mengakses print()fungsi kelas Base.

Akses fungsi diganti menggunakan objek kelas turunan dalam C ++

Contoh 3: Fungsi C ++ Pengalihan Panggilan Dari Kelas Terbitan

 // 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; )

Pengeluaran

 Fungsi Dasar Berasal

Dalam program ini, kami telah menyebut fungsi yang diganti di dalam Derivedkelas itu sendiri.

 class Derived : public Base ( public: void print() ( cout << "Derived Function" << endl; Base::print(); ) );

Perhatikan kod Base::print();, yang memanggil fungsi yang diganti di dalam Derivedkelas.

Akses diganti fungsi di dalam kelas turutan dalam C ++

Contoh 4: Fungsi C ++ Overridden Call 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.

Artikel menarik...