Pewarisan

Pewarisan atau bahasa Inggrisnya inheritance adalah cara "menyalin struktur atau blueprint" suatu class ke dalam class baru. Class yang menerima warisan deklarasi member bisa menambahkan properti dan method baru untuk class baru tersebut. Pewarisan bisa dilakukan dalam bahasa C++ dan beberapa bahasa pemrograman lain yang menerapkan OOP. Tentunya, pewarisan tidak bisa dilakukan dalam bahasa C karena bahasa C tidak menggunakan objek seperti C++.

Inheritance atau pewarisan bisa dilakukan dengan memisahkan nama kelas yang akan mewarisi anggota suatu kelas dengan yang akan diwarisi anggotanya, dengan tanda ":". Jika kelas_asal adalah kelas yang akan diwariskan anggotanya pada kelas_turunan, maka penulisannya jadi seperti di bawah ini.

class kelas_asal:kelas_turunan{
    private :
        char nama[30];
        char kelas[10];
    protected :
    public :
        methodku();
}

Kita juga bisa menambahkan access modifier sebelum nama kelas yang akan diwariskan anggotanya. Contohnya :

class anak{
     public:
         int adik;
         int kakak;
};

class keluarga : public anak{
    public:
        int ayah;
        int ibu;
};

Pada contoh di atas, atribut adik dan kakak dari class anak diwariskan kepada class keluarga. Class keluarga hanya perlu mendeklarasikan atribut ayah dan ibu untuk bisa menggunakan atribut adik dan kakak karena adik dan kakak sudah dideklarasikan dalam class anak. Class keluarga bisa disebut base class atau kelas asal, dan class anak bisa disebut derived class (kelas turunan).

Pewarisan dalam OOP tidak menjadikan atribut sebagai milik bersama, tapi class hanya seperti "menyalin" susunan anggota tambahan dari class lain tanpa perlu deklarasi ulang.

Multiple Inheritance

Contoh sebelumnya adalah contoh inheritance sederhana. Dalam C++, kita juga bisa menggunakan multiple inheritance atau mewariskan properti beberapa kelas sekaligus kepada satu kelas baru. Caranya hampir sama dengan pewarisan satu class, hanya saja kalian perlu tanda koma (,).

#include <iostream>

typedef char Nama[100];

class Anak{
     public:
         Nama adik;
         Nama kakak;
};

class Saudara{
    public:
         Nama Paman;
         Nama Bibi;
         Nama Sepupu;
         Nama Keponakan;
};

class Keluarga_Kecil : public Anak{
    public:
        Nama ayah;
        Nama ibu;
};

class Keluarga_besar : public Anak, public Saudara{
    public:
        Nama ayah;
        Nama ibu;
};

Keluarga_Kecil keluargaku;
Keluarga_besar keluarga_kami;

using namespace std;

int main(){
    cout << "Masukkan nama ayah!\n"; cin >> keluargaku.ayah;
    cout << "Masukkan nama ibu!\n"; cin >> keluargaku.ibu;
    cout << "Masukkan nama kakak!\n"; cin >> keluargaku.kakak;
    cout << "Masukkan nama adik!\n"; cin >> keluargaku.adik;
    cout << endl << endl;
    cout << "Nama ayah : " << keluargaku.ayah << endl;
    cout << "Nama ibu : " << keluargaku.ibu << endl;
    cout << "Nama kakak : " << keluargaku.kakak << endl;
    cout << "Nama adik : " << keluargaku.adik << endl;
    return 0;
}
Contoh Program :
Masukkan nama ayah!
Suristanto
Masukkan nama ibu!
Yuliawati
Masukkan nama kakak!
Gerimisya Stela Rida
Masukkan nama adik!
Nadia Antartika Wati


Nama ayah : Suristanto
Nama ibu : Yuliawati
Nama kakak : Gerimisya Stela Rida
Nama adik : Nadia Antartika Wati

Contoh di atas mewariskan class Anak dan Saudara pada class Keluarga_besar. Member dua class yang diwariskan tersebut bisa digunakan oleh class Keluarga_besar. Keluarga_kecil juga menerima member class Anak yang diwariskan kepadanya.

Pewarisan hanya menyalin struktur class, dan bukan berbagi member. Sekalipun nama member dua class sama, bukan berarti nilai member yang sama akan selalu sama.