Dalam tutorial OOP C++ kali ini kita akan membahas salah satu konsep terpenting dalam OOP, yakni inheritance atau pewarisan class.
Pengertian Inheritance (Pewarisan Class)
Inheritance adalah konsep OOP dimana sebuah class dapat menurunkan data member dan member function yang dimilikinya kepada class lain. Konsep inheritance dipakai untuk memanfaatkan fitur code reuse, yakni menghindari terjadinya duplikasi kode program.
Dalam bahasa Indonesia, inheritance ini disebut juga sebagai pewarisan atau penurunan.
Konsep inheritance membuat sebuah struktur atau hierarki class dalam kode program. Class yang akan diturunkan bisa disebut sebagai class induk (parent class), super class, atau base class.
Sedangkan class yang menerima penurunan bisa disebut sebagai class anak (child class), sub class, derived class atau heir class.
Dalam tutorial ini saya akan menggunakan istilah parent class dan child class, tapi seperti yang tertulis diatas, banyak istilah yang bisa dipakai.
Tidak semua data member dan member function class induk akan diturunkan. Data dan function dengan hak akses private tidak akan diturunkan kepada child class. Hanya data dengan hak akses protected dan public saja yang bisa diakses dari child class.
Cara Menurunkan Class di C++
Untuk menurunkan sebuah class di bahasa pemrograman C++, tulis nama parent class pada saat pendefinisian child class. Berikut contoh kode program yang di maksud:
#include <iostream> using namespace std; class Komputer { // kode untuk class Komputer }; class Laptop: public Komputer { // kode untuk class Laptop }; int main() { Komputer komputerAndi; Laptop laptopAndi; return 0; }
Dalam kode ini saya membuat dua buah class: Komputer dan Laptop. Perhatikan perintah di baris 9, itulah cara menurunkan class Komputer kepada class Laptop. Yakni dengan cara menulis tanda titik dua, diikuti hak akses class yang dalam hal ini public, beserta nama parent class yang ingin diturunkan.
Setelah perintah tersebut, class Laptop adalah anak (child) dari class Komputer. Jika class Komputer memiliki data member dan member function yang di-set sebagai public atau protected, juga akan bisa diakses dari class Laptop (prakteknya akan kita lihat sesaat lagi).
Cara Mengakses Data Parent Class
Contoh sebelumnya masih sangat sederhana, dimana class Komputer dan class Laptop belum memiliki data apapun. Sekarang kita akan isi dengan beberapa data member (property atau variabel), serta member function (method):
#include <iostream> using namespace std; class Komputer { public: string processor = "AMD Ryzen 7"; string cekKomputer() { return "Ini berasal dari class Komputer"; } }; class Laptop: public Komputer { public: string merk = "Lenovo"; string cekLaptop() { return "Ini berasal dari class Laptop"; } }; int main() { Laptop laptopAndi; cout << laptopAndi.processor << endl; cout << laptopAndi.merk << endl; cout << laptopAndi.cekKomputer() << endl; cout << laptopAndi.cekLaptop() << endl; return 0; }
Hasil kode program:
AMD Ryzen 7 Lenovo Ini berasal dari class Komputer Ini berasal dari class Laptop
Dalam kode diatas, class Komputer memiliki satu data member processor dan satu member function cekKomputer(). Sedangkan class Laptop memiliki data member merk dan member function cekLaptop().
Karena class Laptop adalah turunan dari class Komputer, maka kita bisa mengakses semua isi class Komputer dari object class Laptop.
Di dalam function main() saya membuat object laptopAndi yang di instansiasi dari class Laptop. Object laptopAndi bisa mengakses semua isi class Komputer, yakni laptopAndi.processor dan laptopAndi.cekKomputer(). Seolah-olah data dan function ini di definisikan dari dalam class Laptop.
Hak Akses Protected Dalam Inheritance
Perbedaan utama dari hak akses private dengan protected ada ketika sebuah class diturunkan dari class lain.
#include <iostream> using namespace std; class Komputer { protected: string processor = "AMD Ryzen 7"; string merk = "Lenovo"; string memory = "8 GB"; }; class Laptop: public Komputer { public: string lihatSpec() { return "Merk: " + merk + ", processor: "+ processor + ", jumlah memory: " + memory; } }; int main() { Laptop laptopAndi; cout << laptopAndi.lihatSpec() << endl; // cout << laptopAndi.processor << endl; // ini akan error return 0; }
Hasil kode program:
Merk: Lenovo, processor: AMD Ryzen 7, jumlah memory: 8 GB
Kali ini class Komputer memiliki 3 data member dengan hak akses protected, yakni processor, merk dan memory. Class Komputer kemudian saya turunkan kepada class Laptop.
Di dalam class Laptop terdapat satu member function lihatSpec(), yang akan mengakses ketiga data member milik class Komputer. Ini bisa dilakukan karena protected tetap bisa diakses dari class turunan.
Namun data protected tetap tidak bisa diakses dari luar class. Kode di baris 26 akan menghasilkan error, kecuali hak akses ketiga data member milik class Komputer di-set sebagai public.
Mengisi Data Member Menggunakan Constructor
Untuk materi yang sedikit lebih kompleks, dalam kode program berikut saya mengisi ketiga data member milik class Komputer dari constructor class Laptop. Silahkan pelajari sejenak alur kode program yang terjadi:
#include <iostream> using namespace std; class Komputer { protected: string processor; string merk; string memory; }; class Laptop: public Komputer { public: Laptop(string paramProcessor, string paramMerk, string paramMemory) { processor = paramProcessor; merk = paramMerk; memory = paramMemory; } string lihatSpec() { return "Merk: " + merk + ", processor: "+ processor + ", jumlah memory: " + memory; } }; int main() { Laptop laptopAndi("Intel Core i7","HP","16 GB"); Laptop laptopRudi("Intel Core i3","Asus","4 GB"); cout << laptopAndi.lihatSpec() << endl; cout << laptopRudi.lihatSpec() << endl; return 0; }
Hasil kode program:
Pendefinisian data member processor, merk dan memory tetap dilakukan dari class Komputer. Hanya saja sekarang proses pengisian ketiga data dilakukan oleh constructor class Laptop seperti di baris 15 – 19.
Constructor class Laptop butuh 3 buah parameter, yakni paramProcessor, paramMerk dan paramMemory. Ketika parameter ini harus diisi pada saat proses instansiasi class Laptop seperti di baris 29 dan 30.
Hasilnya, ketika method lihatSpec() diakses dari object laptopAndi dan laptopRudi, akan tampil nilai yang berbeda-beda.
Inheritance atau proses penurunan class memang menjadi topik yang cukup rumit tapi sangat penting. Untuk kode program yang kompleks, bisa saja ada sebuah class yang diturunkan kepada class lain, dan kemudian di turunkan lagi kepada class selanjutnya.
Inilah yang akan kita bahas dalam lanjutan tutorial OOP C++ di Duniailkom, yakni Cara Membuat Multilevel Inheritance.
#include <iostream>
using namespace std;
class smartPhone{
public:
string processor = "SnapDragon 815";
string cekProcessor(){
return "Ini Berasal Dari Class Processor";
}
};
class tab:public smartPhone{
public:
int ukuranLayar = 8;
int celukuranLayar(){
return "Ini Berasal Dari Class Ukuran Layar";
}
};
int main(){
tab tabDaniel;
cout << tabDaniel.processor << endl;
cout << tabDaniel.cekProcessor() << endl;
cout<< tabDaniel.ukuranLayar << endl;
cout<< tabDaniel.cekukuranLayar() << endl;
return 0;
}
bang bisa jelasin kah? dimana salahnya
//invalid conversation from const char to int
makasi banggggggggggg
oiya bang itu ada typo di cekukuranLayar()
tapi saya betulin masih salah
makasi bang
#include <iostream>
using namespace std;
class smartPhone{
public:
string processor = "SnapDragon 815";
string cekProcessor(){
return "Ini Berasal Dari Class Processor";
}
};
class tab: public smartPhone{
public:
string ukuranLayar = "8";
string cekukuranLayar(){
return "Ini Berasal Dari Class Ukuran Layar";
}
};
int main()
{
tab tabDaniel;
cout << "======================" <<endl;
cout << tabDaniel.processor << endl;
cout << tabDaniel.cekProcessor() << endl;
cout << "======================" <<endl;
cout<< tabDaniel.ukuranLayar << endl;
cout<< tabDaniel.cekukuranLayar() << endl;
return 0;
}
ane coba bisa tuh bro… :D
makasi bang happy new year