Penjelasan Function Overriding

Written by: Fajar   |   Updated on: Juni 10, 2019
function overriding

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:

Hallo saya Function dari derived Class

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:

Baca :   Penjelasan Scope atau Ruang Lingkup

Hallo saya Function dari base class

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.

4 Replies to “Penjelasan Function Overriding”

  1. 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”.

    #include <iostream>
    using namespace std;
     
    class baseClass {
    public:
      void perkenalan() { // Hidden Function
        cout<<"Hallo saya Function dari base class"; 
      }
    };
    class derivedClass: public baseClass{
    public:
      void perkenalan(int i) { // nama fungsi sama "perkenalan"
        cout<<"Hallo param " << i << " Function dari derived Class";
      }
    };
    int main() {
      derivedClass a;
      a.perkenalan(); // error fungsi "perkenalan()" tidak ditemukan
    
      return 0;
    }

    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.

    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";
      }
    };

    Kedua, cara mencontohkan overriding seharusnya dengan polymorphism, contohnya seperti dibawah ini.

    int main() {
      derivedClass d;
      baseClass& a = d;
      a.perkenalan();
    
      return 0;
    }

    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.

    class baseClass {
    public:
      virtual void perkenalan(){ //Overridden Function
        cout<<"Hallo saya Function dari base class"; 
      }
    };
    class derivedClass: public baseClass{
    public:
      void perkenalan() override { //Overriding Function
        cout<<"Hallo saya Function dari derived Class";
      }
    };

    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.

    #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() override { //Overriding Function
        cout<<"Hallo saya Function dari derived Class";
      }
    };
    
    int main() {
      derivedClass d;
      baseClass& a = d;
      a.perkenalan();
    
      return 0;
    }
    1. 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

  2. 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.

  3. What’s up to all, it’s genuinely a pleasant for me
    to visit this web site, it consists of useful
    Information.

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *