Bagaimana Menerapkan Fungsi Virtual di C ++?



Artikel ini akan memperkenalkan Anda pada konsep pemrograman lain yaitu Fungsi Virtual di C ++. Konsep tersebut akan didukung dengan demonstrasi.

Fungsi virtual di C ++ adalah fungsi anggota dalam kelas dasar yang kita definisikan ulang dalam kelas turunan. Artikel ini akan membantu Anda menjelajahi konsep secara detail. Petunjuk berikut akan dibahas dalam artikel ini,

Jadi mari kita mulai dengan artikel ini tentang Fungsi Virtual di C ++





Apa itu Fungsi Virtual?

Fungsi virtual adalah fungsi anggota dalam kelas dasar yang kita definisikan ulang dalam kelas turunan. Ini dideklarasikan menggunakan kata kunci virtual. Ketika kelas yang berisi fungsi virtual diwariskan, kelas turunan mendefinisikan ulang fungsi virtual agar sesuai dengan kebutuhannya sendiri.

Pindah dengan artikel ini tentang Fungsi Virtual di C ++



Aturan untuk Fungsi Virtual di C ++:

  • Mereka selalu didefinisikan di kelas dasar dan diganti di kelas turunan tetapi tidak wajib untuk diganti di kelas turunan.
  • Fungsi virtual harus dideklarasikan di bagian publik kelas.
  • Mereka tidak bisa statis atau fungsi teman juga tidak bisa menjadi fungsi virtual kelas lain.
  • Fungsi virtual harus diakses menggunakan pointer untuk mencapai polimorfisme run time.

Pindah dengan artikel ini tentang Fungsi Virtual di C ++.

Apa itu mengikat?

Mengikat fungsi berarti bahwa di mana pun ada pemanggilan fungsi, kompilator perlu mengetahui definisi fungsi mana yang harus dicocokkan. Ini tergantung pada tanda tangan dari setiap deklarasi fungsi & tugas yang diambil. Selain itu, kompilator perlu mengetahui bahwa saat ini akan terjadi pencocokan antara pemanggilan fungsi dan pemilihan definisi yang benar.

Pindah dengan artikel ini tentang Fungsi Virtual di C ++



Pengikatan Awal

Pengikatan awal adalah fenomena di mana keputusan untuk mencocokkan berbagai pemanggilan fungsi terjadi pada waktu kompilasi itu sendiri dan kompilator secara langsung mengaitkan tautan dengan alamat. Ia juga dikenal sebagai Static Binding atau Compile-time Binding.

  • Seperti yang kita ketahui, kita menulis kode dalam bahasa tingkat tinggi
  • Kemudian kompilator mengubahnya menjadi bahasa tingkat rendah yang dapat dimengerti komputer, sebagian besar bahasa mesin pada saat kompilasi
  • Pada pengikatan awal, kompilator secara langsung memberikan alamat instruksi deklarasi fungsi ke instruksi pemanggilan fungsi
  • Dengan demikian, seperti namanya, pengikatan terjadi sangat awal sebelum program dijalankan.

Contoh

#include menggunakan namespace kelas std Hewan {public: void sound () {cout<< 'Genric animal sound' << endl } } class Cats: public Animals { public: void sound() { cout << 'Cat meow' <sound () // early binding return 0}

Keluaran

Output- Fungsi virtual di C ++ - Edureka

klarifikasi ion
Dalam contoh ini, kami membuat pointer a ke kelas induk Hewan. Kemudian dengan menulis a = & c, penunjuk 'a' mulai merujuk ke objek c dari kelas Kucing.
a -> sound () - Saat memanggil fungsi sound () yang ada di kedua kelas dengan pointer 'a', fungsi kelas induk dipanggil, bahkan jika pointer merujuk ke objek kelas Kucing .

Ini karena Early Binding. Kita tahu bahwa 'a' adalah pointer dari kelas induk yang merujuk ke objek dari kelas anak. Karena pengikatan awal terjadi pada waktu kompilasi, oleh karena itu ketika kompilator melihat bahwa 'a' adalah pointer dari kelas induk, ia mencocokkan panggilan tersebut dengan fungsi 'sound ()' dari kelas induk tanpa mencari objek penunjuknya mengacu pada.

Pindah dengan artikel ini tentang Fungsi Virtual di C ++

Mengikat Terlambat

Dalam pengikatan akhir, kompilator mengidentifikasi objek pada waktu proses dan kemudian mencocokkan pemanggilan fungsi dengan fungsi yang benar. Ia juga dikenal sebagai Dynamic Binding atau Runtime Binding.

Pengikatan terlambat dalam masalah di atas dapat diselesaikan dengan menggunakan kata kunci virtual di kelas dasar. Mari kita lihat bagaimana hal ini terjadi dengan menggunakan contoh di atas itu sendiri, tetapi hanya menambahkan kata kunci virtual.

Contoh

#include menggunakan namespace kelas std Hewan {public: virtual void sound () {cout<< 'Genric aniaml sound' << endl } } class Cats: public Animals { public: void sound() { cout << 'Cats meow' <suara () kembali 0}

Keluaran

Penjelasan
Di sini fungsi sound () dari kelas dasar dibuat virtual, sehingga compiler sekarang melakukan pengikatan akhir untuk fungsi ini. Sekarang, panggilan fungsi dari fungsi sound () akan dicocokkan dengan definisi fungsi saat runtime. Karena kompilator sekarang mengidentifikasi pointer 'a' sebagai merujuk ke objek 'c' dari kelas turunan Kucing, itu akan memanggil fungsi sound () dari kelas Kucing.

Pindah dengan artikel ini tentang Fungsi Virtual di C ++

Fungsi Virtual Murni

Fungsi virtual murni di C ++ adalah fungsi virtual yang tidak kami implementasikan, kami hanya mendeklarasikannya. Fungsi virtual murni dideklarasikan dengan menetapkan 0 di deklarasi.

perbedaan antara css dan css3

suara kosong virtual () = 0

Di sini sound () adalah fungsi virtual murni.

Pindah dengan artikel ini tentang Fungsi Virtual di C ++

Kelas Abstrak

Kelas abstrak didefinisikan sebagai kelas dengan satu atau lebih fungsi virtual murni. Sebagaimana dijelaskan di atas fungsi virtual murni adalah fungsi anggota virtual yang ditandai tidak memiliki implementasi. Itu tidak memiliki implementasi yang mungkin dengan informasi yang disediakan di kelas, termasuk kelas dasar apa pun. Kelas abstrak juga dikenal sebagai kelas dasar abstrak.

Contoh

#include using namespace std class Employee // abstract base class {virtual int getSalary () = 0 // pure virtual function} class Employee_1: public Employee {int gaji publik: Employee_1 (int s) {gaji = s} int getSalary () {gaji pengembalian}} kelas Karyawan_2: Karyawan publik {gaji int publik: Karyawan_2 (int t) {gaji = t} int getSalary () {gaji kembali}} int utama () {Karyawan_1 e1 (5000) Karyawan_2 e2 (3000) int a, ba = e1.getSalary () b = e2.getSalary () cout<< 'Salary of Developer : ' << a << endl cout << 'Salary of Driver : ' << b << endl return 0 } 

Keluaran

Penjelasan
Fungsi 'getSalary ()' di kelas Karyawan adalah fungsi virtual murni. Karena kelas Karyawan berisi fungsi virtual murni, maka kelas ini adalah kelas dasar abstrak.
Karena fungsi virtual murni didefinisikan dalam subclass, oleh karena itu fungsi 'getSalary ()' didefinisikan di kedua subclass dari class Employee yaitu di Employee_1 dan Employee_2.

Pindah dengan artikel ini tentang Fungsi Virtual di C ++

Contoh untuk Fungsi Virtual

#include menggunakan namespace std class base {public: void function_1 () {cout<< 'base class function 1n' } virtual void function_2() { cout << 'base class function 2n' } virtual void function_3() { cout << 'base class function 3n' } virtual void function_4() { cout << 'base class function 4n' } } class derived : public base { public: void function_1() { cout << 'derived class function 1n' } void function_2() { cout << 'derived class function 2n' } void function_4(int x) { cout function_2 () ptr-> function_3 () ptr-> function_4 ()}

Keluaran

Penjelasan
Untuk pemanggilan fungsi function_1 (), versi kelas dasar dari fungsi dipanggil, function_2 () diganti dalam kelas turunan sehingga versi kelas turunan dipanggil, function_3 () tidak diganti dalam kelas turunan dan merupakan fungsi virtual sehingga versi kelas dasar dipanggil, demikian pula function_4 () tidak diganti sehingga versi kelas dasar dipanggil.

Jadi kami telah sampai pada akhir artikel ini tentang 'Fungsi Virtual di C ++'. Jika Anda ingin mempelajari lebih lanjut, lihat oleh Edureka, perusahaan pembelajaran online terpercaya. Kursus pelatihan dan sertifikasi Java J2EE dan SOA dari Edureka dirancang untuk melatih Anda untuk konsep inti dan lanjutan Java bersama dengan berbagai kerangka kerja Java seperti Hibernate & Spring.

Ada pertanyaan untuk kami? Harap sebutkan di bagian komentar blog ini dan kami akan menghubungi Anda kembali secepatnya.