Tutorial Belajar OOP C++ Part 11: Pengertian Function Overriding

Melanjutkan materi tutorial belajar OOP C++, kali ini kita akan berkenalan dengan Function Overriding. Istilah ini terdengar mirip seperti Function Overloading yang pernah kita bahas pada tutorial C++ procedural, namun pengertiannya cukup berbeda.

Function overriding ini kadang juga disebut sebagai penimpaan function.


Pengertian Function Overriding

Function overriding adalah sebuah situasi dimana member function class turunan menimpa member function milik parent class. Ini bisa terjadi jika terdapat nama function yang sama di child class dan juga parent class.

Berikut contoh situasi yang dimaksud:

#include <iostream>

using namespace std;

class Komputer {
  public:
    string cekInfo() {
      return "Ini berasal dari class Komputer";
    }
};

class Laptop: public Komputer {
  public:
    string cekInfo() {
      return "Ini berasal dari class Laptop";
    }
};

int main()
{
  Laptop laptopAndi;
  cout << laptopAndi.cekInfo() << endl;

  return 0;
}

Pada kode program ini, class Komputer diturunkan kepada class Laptop. Perhatikan bahwa di dalam kedua class terdapat member function cekInfo() dengan hak akses public.

Di dalam function main, saya meng-instansiasi class Laptop ke dalam variabel laptopAndi, lalu menjalankan perintah cout << laptopAndi.cekInfo().

Pertanyaannya, function cekInfo() milik siapa yang akan dijalankan? apakah milik class Laptop, atau milik class Komputer?

Saat kode di atas dijalankan, hasilnya adalah sebagai berikut:

Ini berasal dari class Laptop

Ternyata function cekInfo() milik class Laptop-lah yang dijalankan. Dalam kasus ini sudah terjadi function overriding, dimana member function cekInfo() milik class Laptop menimpa member function cekInfo() milik class Komputer.


Cara Mengakses Function Overriding Milik Parent Class

Efek function overriding menyebabkan kita tidak bisa mengakses member function milik parent class.

Namun sebenarnya masih bisa dilakukan melalui operator khusus yang disebut sebagai scope resolution operator. Operator ini ditulis dengan tanda titik dua, dua kali “::“. Berikut contoh penggunaannya:

#include <iostream>

using namespace std;

class Komputer {
  public:
    string cekInfo() {
      return "Ini berasal dari class Komputer";
    }
};

class Laptop: public Komputer {
  public:
    string cekInfo() {
      return "Ini berasal dari class Laptop";
    }
};

int main()
{
  Laptop laptopAndi;
  cout << laptopAndi.cekInfo() << endl;
  cout << laptopAndi.Komputer::cekInfo() << endl;

  return 0;
}

Agar bisa mengakses function cekInfo(), saya menggunakan perintah cout << laptopAndi.Komputer::cekInfo() seperti di baris 23. Inilah cara mengakses member function yang sudah ter-overridden.

Format penulisan yang dipakai adalah: namaObject.NamaClass::namaFunction().


Cara Mengakses Function Overriding Dari Child Class

Operator scope resolution juga bisa dipakai dari dalam child class ketika kita ingin mengakses function milik parent class yang sudah ter-overridden. Berikut contoh yang dimaksud:

#include <iostream>

using namespace std;

class Komputer {
  public:
    string cekInfo() {
      return "Ini berasal dari class Komputer";
    }
};

class Laptop: public Komputer {
  public:
    string cekInfo() {
      cout << Komputer::cekInfo() << endl;
      return "Ini berasal dari class Laptop";
    }
};

int main()
{
  Laptop laptopAndi;
  cout << laptopAndi.cekInfo() << endl;

  return 0;
}

Hasil kode program:

Contoh Kode Program Function Overriding OOP Cpp

Sekarang saya mengakses function cekInfo() milik class Komputer di dalam function cekInfo() class Laptop pada baris 15. Hasilnya, akan tampil teks “Ini berasal dari class Komputer” milik class Komputer.


Materi function overriding yang kita bahas kali ini merupakan kasus khusus yang bisa terjadi akibat dari penurunan class (proses inheritance).

Sebenarnya tetap disarankan untuk selalu menulis nama function yang berbeda pada setiap class agar tidak terjadi penimpaan function. Namun jika itu terjadi, kita bisa mengaksesnya menggunakan scope resolution operator.

Lanjut, pada tutorial berikutnya akan dibahas tentang Cara Mengakses Constructor Parent Class.

Add Comment