Penjelasan Virtual Function untuk Polymorphism

Written by: Fajar   |   Updated on: Juli 31, 2019
Polymorphism

Pengertian Polymorphism

Polymorphism adalah sebuah fitur yang ada pada bahasa pemrograman C++. digunakan untuk memberikan kemampuan pada function pada anggota class, untuk memberikan seolah-olah function tersebut memiliki berbagai bentuk yang sesuai berdasarkan class masing-masing.

Ketika menggunakan Polymorphism, jika kita mencoba untuk memanggil sebuah member function, maka program akan merespon dengan member function yang sesuai berdasarkan yang ada pada object dan class yang digunakan.

Agar lebih mudah dipahami, Berikut penulis akan membuat 2 program dimana yang satu tidak menggunakan kemampuan Polymorphism dan yang satu menggunakan kemampuan Polymorphism.

Tanpa kemampuan Polymorphism:

#include <iostream>
using namespace std;

class seseorang{
    public:
    void pesan(){
        cout<<"Pesan dari seseorang"<<endl;
    }
};

class budi:public seseorang{
    public:
    void pesan(){
        cout<<"Pesan dari budi"<<endl;
    }
};

class andi:public seseorang{
    public:
    void pesan(){
        cout<<"Pesan dari andi"<<endl;
    }

};

int main(){
    seseorang *obyek;
    budi a;
    andi b;

    obyek = &a;
    obyek->pesan();
    obyek = &b;
    obyek->pesan();

    return 0;
}

Hasil:
Pesan dari seseorang
Pesan dari seseorang

Meskipun object obyek mengarah pada object a dan b, tapi karna tidak menggukan fitur Polymorphism, maka function pesan() tidak dapat diwakilkan dengan function yang dimiliki oleh masing-masing class.

Untuk membuat function pada class di atas memiliki kemampuan Polymorphism, kita membutuhkan kata kunci virtual sebelum tipe data function pada base class.

Pengertian Virtual Function

Virtual function adalah sebuah member function yang didirikan di dalam base class dan overridden oleh derived class. Ketika anda menunjuk ke suatu object yang dibuat dari derivered class dengan menggunakan sebuah object pointer yang dibuat menggunakan base class, anda dapat memanggil sebuah function yang dibuat sebagai virtual function. setiap pemanggilan function, akan mengeksekusi masing-masing function berdasarkan yang dimiliki oleh class yang ditunjuk.

Baca :   Penjelasan Variabel Durasi Statis

Contoh penulisan:

class seseorang{
    public:
    virtual void pesan(){
        cout<<"Pesan dari seseorang"<<endl;
    }
};

Contoh program:

#include <iostream>
using namespace std;

class seseorang{
    public:
    virtual void pesan(){
        cout<<"Pesan dari seseorang"<<endl;
    }
};

class budi:public seseorang{
    public:
    void pesan(){
        cout<<"Pesan dari budi"<<endl;
    }
};

class andi:public seseorang{
    public:
    void pesan(){
        cout<<"Pesan dari andi"<<endl;
    }

};

int main(){
    seseorang *obyek;
    budi a;
    andi b;

    obyek = &a;
    obyek->pesan();
    obyek = &b;
    obyek->pesan();

    return 0;
}

Pesan dari budi
Pesan dari andi

Tambahan : Pure virtual function

Pure virtual function merupakan nama dari tindakan untuk membuat abtraksi pada class, dengan cara mendefinisikan sebuah virtual function tanpa definisi.

Jika saat anda membuat kemampuan Polymorphism pada class-class anda dan berpikiran bahwa virtual function yang berada di base class sebenarnya tidak membutuhkan definisi, maka anda dapat membuat sebuah “pure vitual function” dengan cara seperti berikut.

Contoh penulisan:

class seseorang{
    public:
    virtual void pesan()=0;
};

Contoh Program:

#include <iostream>
using namespace std;

class seseorang{
    public:
    virtual void pesan()=0;
};

class budi:public seseorang{
    public:
    void pesan(){
        cout<<"Pesan dari budi"<<endl;
    }
};

class andi:public seseorang{
    public:
    void pesan(){
        cout<<"Pesan dari andi"<<endl;
    }

};

int main(){
    seseorang *obyek;
    budi a;
    andi b;

    obyek = &a;
    obyek->pesan();
    obyek = &b;
    obyek->pesan();

    return 0;
}

One Reply to “Penjelasan Virtual Function untuk Polymorphism”

Tinggalkan Balasan

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