Penjelasan Function Overriding
Function overriding adalah sebuah fitur dalam “inheritance pada C++” dimana kita dimungkinkan untuk membuat function yang sama persis di dalam derived class seperti function yang ada pada base class. Hal ini seperti membuat versi function baru di dalam derived class, untuk menggantikan peran function yang ada pada base class.
Contoh Penulisan
//dalam base class: Void perkenalan(){} //Dalam derived class: Void perkenalan(){}
Untuk mengesampingkan atau override di dalam derived class, kita harus membuat sebuah function yang terdiri dari tipe data dan parameter yang sama persis seperti yang ada pada base class.
Contoh Program
#include <iostream> using namespace std; class baseClass { public: virtual void perkenalan(){ //Overridden Function cout<<"Hallo saya Function dari base class"; } }; class derivedClass: public baseClass{ public: void perkenalan() { //Overriding Function cout<<"Hallo saya Function dari derived Class"; } }; int main() { derivedClass a; a.perkenalan(); return 0; }
Dari contoh di atas akan menghasilkan program seperti berikut:
Di dalam function overriding, function yang berada pada base class dan yang akan “disampingkan” (diabaikan atau ditimpa) disebut sebagai “overridden”, dan function yang berada dalam derived class dan ditujukan untuk melakukan “pengesampingan” atau override disebut dengan overriding function.
Cara memanggil Overridden
Meskipun sebuah Overridden sudah dikesampingkan atau digantikan dengan overriding function, di C++ kita masih dimungkinkan untuk memanggil overridden function, dengan cara melakukan penulisan seperti di bawah ini:
Contoh Penulisan:
object.baseClass::fungsi();
contoh Program
#include <iostream> using namespace std; class baseClass { public: virtual void perkenalan(){ cout<<"Hallo saya Function dari base class"; } }; class derivedClass: public baseClass{ public: void perkenalan() { cout<<"Hallo saya Function dari derived Class"; } }; int main() { derivedClass a; a.baseClass::perkenalan(); //Pemanggilan overridden return 0; }
Dari contoh program di atas akan menghasilkan:
Perbedaan Function Overloading dan Function Overriding
Overloading | Overriding | |
---|---|---|
Pewarisan | Tidak dilakukan di dalam pewarisan. | Di lakukan dalam pewarisan. |
Ciri khas function | Biasanya harus berbeda pada parameter yang digunakan. | Harus sama dengan satu sama lain. |
Ruang lingkup | Berada di ruang lingkup yang sama. | Berada di ruang lingkup berbeda. |
Digunakan untuk | Digunakan untuk menambahkan function yang melakukan perkejaan yang bebeda tergantung class yang digunakan. | Digunakan untuk menambahkan kemungkinan input atau argument yang bervariasi dan dapat diterima oleh function. |
Saya pikir penjelasan artikel ini masih salah, berdasarkan pengetahuanku tentang C++. Tapi bisa saja saya yang salah paham, jadi bisa didiskusikan lebih lanjut.
Ada 3 poin yang saya rasa salah/kurang dalam artike ini, berikut ulasanya.
Pertama, penjelasan artikel kelihatan masih bingung tentang overriding vs function hidding di C++.
Ada satu yang kurang dari penjelasan tentang overriding, yaitu overriding hanya bisa pada
virtual
function.Contoh dalam artikel bukan contoh untuk overriding, melainkan function hidding.
Di C++, kalau derived class mendefinisikan non-virtual function yang sama nama fungsinya dengan nama fungsi di base class, maka fungsi-fungsi pada base class dengan nama yang sama, semuanya akan “disembunyikan”.
Syarat function hidding hanyalah nama fungsinya sama, return type dan parameter tidak berpengaruh.
Dalam artikel, nama dan parameter fungsi sama karena ingin menjelaskan overriding, tapi yang terjadi adalah function hidding karena dilakukan pada non-virtual function dan nama fungsinya sama antara base dan derived class.
Jadi, untuk contoh yang benar seharusnya menggunakan
virtual
pada base class.Kedua, cara mencontohkan overriding seharusnya dengan polymorphism, contohnya seperti dibawah ini.
Hasil ouput akan berbeda jika fungsi
baseClass::perkenalan()
virtual atau tidak.Kalau
virtual
, ouput-nya akan memperlihatkan overriding:Hallo saya Function dari derived Class
sedangkan jika
baseClass::perkenalan()
non-virtual, outputnya:Hallo saya Function dari base class
Ketiga, C++ punya keyword override dan final untuk keperluan overriding.
Keyword override memastikan fungsi yang akan di-override ada pada base class dan virtual.
Kalau fungsi pada base class yang akan di-override tidak virtual, maka akan compile error.
Sebenarnya kalau override dan final ini dijelakan, akan langsung kelihatan salahnya artikel dimana.
Di bawah ini contoh penggunaan keyword override.
kalau keyword final memastikan fungsi pada base class tidak di-override pada derived class.
Jadi, saya pikir contoh kode yang lebih tepat adalah sebagai berikut.
Salam Januar Andaria.
Terima kasih atas masukan dan informasi anda untuk membantu mengembangkan situs ini.
Sebagai tindakan kami, kami telah memperbaiki artikel ini.
Kami sangat menghargai masukan anda.
Salam hormat.
Team Belajarcpp
It’s really a great and useful piece of info. I am satisfied that you shared this helpful
information with us. Please stay us informed like this.
Thank you for sharing.
What’s up to all, it’s genuinely a pleasant for me
to visit this web site, it consists of useful
Information.