Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> Bahasa C

Polimorfisme C++ Dijelaskan: Contoh Praktis & Konsep Kunci

Apa Itu Polimorfisme dalam C++?

Dalam C++, polimorfisme menyebabkan fungsi anggota berperilaku berbeda berdasarkan objek yang memanggilnya. Polimorfisme adalah kata Yunani yang berarti memiliki banyak bentuk. Ini terjadi ketika Anda memiliki hierarki kelas yang terkait melalui pewarisan.

Misalnya, misalkan kita memiliki fungsi makeSound(). Ketika kucing memanggil fungsi ini, itu akan mengeluarkan suara miau. Ketika sapi memanggil fungsi yang sama, itu akan memberikan suara moo.

Polimorfisme C++ Dijelaskan: Contoh Praktis & Konsep Kunci

Meskipun kita memiliki satu fungsi, ia berperilaku berbeda di bawah keadaan yang berbeda. Fungsi memiliki banyak bentuk; hence, kita telah mencapai polimorfisme.

Dalam tutorial C++ ini, Anda akan mempelajari:

Jenis Polimorfisme

C++ mendukung dua jenis polimorfisme:

Polimorfisme C++ Dijelaskan: Contoh Praktis & Konsep Kunci

Polimorfisme Waktu Kompilasi

Anda memanggil fungsi yang di-overload dengan mencocokkan jumlah dan tipe argumen. Informasi tersedia selama waktu kompilasi. Ini berarti kompiler C++ akan memilih fungsi yang tepat pada waktu kompilasi.

Polimorfisme waktu kompilasi dicapai melalui pengoverloadan fungsi dan pengoverloadan operator.

Pengoverloadan Fungsi

Pengoverloadan fungsi terjadi ketika kita memiliki banyak fungsi dengan nama yang serupa tetapi argumen yang berbeda. Argumen mungkin berbeda dalam hal jumlah atau tipe.

Contoh 1:

 #include <iostream> using namespace std; void test(int i) { cout << " The int is " << i << endl; } void test(double f) { cout << " The float is " << f << endl; } void test(char const *ch) { cout << " The char* is " << ch << endl; } int main() { test(5); test(5.5); test("five"); return 0; } 

Output:

Polimorfisme C++ Dijelaskan: Contoh Praktis & Konsep Kunci

Berikut adalah screenshot kode:

Polimorfisme C++ Dijelaskan: Contoh Praktis & Konsep Kunci

Penjelasan Kode:

  1. Sertakan file header iostream ke dalam kode kami. Kita akan dapat menggunakan fungsinya.
  2. Sertakan namespace std dalam kode kami. Kita akan dapat menggunakan kelasnya tanpa memanggilnya.
  3. Buat fungsi bernama test yang mengambil parameter integer i. Tanda { menandai awal tubuh fungsi test.
  4. Pernyataan yang akan dieksekusi jika fungsi test di atas dipanggil.
  5. Akhir tubuh fungsi test di atas.
  6. Buat fungsi bernama test yang mengambil parameter float f. Tanda { menandai awal tubuh fungsi test.
  7. Pernyataan yang akan dieksekusi jika fungsi test di atas dipanggil.
  8. Akhir tubuh fungsi test di atas.
  9. Buat fungsi bernama test yang mengambil parameter karakter ch. Tanda { menandai awal tubuh fungsi test.
  10. Pernyataan yang akan dieksekusi jika fungsi test di atas dipanggil.
  11. Akhir tubuh fungsi test di atas.
  12. Panggil fungsi main(). Tanda { menandai awal tubuh fungsi.
  13. Panggil fungsi test dan teruskan 5 kepadanya sebagai nilai argumen. Ini memanggil fungsi test yang menerima argumen integer, yaitu fungsi test pertama.
  14. Panggil fungsi test dan teruskan 5.5 kepadanya sebagai nilai argumen. Ini akan memanggil fungsi test yang menerima argumen float, yaitu fungsi test kedua.
  15. Panggil fungsi test dan teruskan "five" kepadanya sebagai nilai argumen. Ini akan memanggil fungsi test yang menerima argumen karakter, yaitu fungsi test ketiga.
  16. Program harus mengembalikan nilai jika berjalan dengan sukses.
  17. Akhir tubuh fungsi main().

Kita memiliki tiga fungsi dengan nama yang sama tetapi tipe argumen yang berbeda. Kita telah mencapai polimorfisme.

Pengoverloadan Operator

Dalam Pengoverloadan Operator, kita menentukan makna baru untuk operator C++. Ini juga mengubah cara operator bekerja. Misalnya, kita dapat menentukan operator + untuk menggabungkan dua string. Kita mengenalnya sebagai operator penambahan untuk menambahkan nilai numerik. Setelah definisi kita, ketika ditempatkan antara integer, ia akan menambahkannya. Ketika ditempatkan antara string, ia akan menggabungkannya.

Contoh 2:

 #include<iostream> using namespace std; class ComplexNum { private: int real, over; public: ComplexNum(int rl = 0, int ov = 0) { real = rl; over = ov; } ComplexNum operator + (ComplexNum const &obj) { ComplexNum result; result.real = real + obj.real; result.over = over + obj.over; return result; } void print() { cout << real << " + i" << over << endl; } }; int main() { ComplexNum c1(10, 2), c2(3, 7); ComplexNum c3 = c1+c2; c3.print(); } 

Output:

Polimorfisme C++ Dijelaskan: Contoh Praktis & Konsep Kunci

Berikut adalah screenshot kode:

Polimorfisme C++ Dijelaskan: Contoh Praktis & Konsep Kunci

Polimorfisme C++ Dijelaskan: Contoh Praktis & Konsep Kunci

Penjelasan Kode:

  1. Sertakan file header iostream ke dalam program kami untuk menggunakan fungsinya.
  2. Sertakan namespace std ke dalam program kami untuk menggunakan kelasnya tanpa memanggilnya.
  3. Buat kelas bernama ComplexNum. Tanda { menandai awal tubuh kelas.
  4. Gunakan pengubah akses private untuk menandai variabel sebagai private, berarti hanya dapat diakses dari dalam kelas.
  5. Definisikan dua variabel integer, real dan over.
  6. Gunakan pengubah akses public untuk menandai konstruktor sebagai public, berarti dapat diakses bahkan dari luar kelas.
  7. Buat konstruktor kelas dan inisialisasi variabel.
  8. Inisialisasi nilai variabel real.
  9. Inisialisasi nilai variabel over.
  10. Akhir tubuh konstruktor.
  11. Kita perlu mengganti makna operator +.
  12. Buat tipe data result dari tipe ComplexNum.
  13. Gunakan operator + dengan bilangan kompleks. Baris ini akan menambahkan bagian real dari suatu bilangan ke bagian real dari bilangan lain.
  14. Gunakan operator + dengan bilangan kompleks. Baris ini akan menambahkan bagian imajiner dari suatu bilangan ke bagian imajiner dari bilangan lain.
  15. Program akan mengembalikan nilai variabel result setelah eksekusi sukses.
  16. Akhir definisi makna baru dari operator +, yaitu overload.
  17. Panggil metode print().
  18. Cetak bilangan kompleks baru setelah penambahan ke konsol.
  19. Akhir tubuh fungsi print().
  20. Akhir tubuh kelas ComplexNum.
  21. Panggil fungsi main().
  22. Masukkan nilai bagian real dan imajiner yang akan ditambahkan. Bagian pertama dari c1 akan ditambahkan ke bagian pertama dari c2, yaitu 10+3. Bagian kedua dari c1 akan ditambahkan ke bagian kedua dari c, yaitu 2+7.
  23. Lakukan operasi menggunakan operator + yang di-overload dan simpan hasilnya dalam variabel c3.
  24. Cetak nilai variabel c3 ke konsol.
  25. Akhir tubuh fungsi main().

Polimorfisme Waktu Eksekusi

Ini terjadi ketika metode suatu objek dipanggil selama runtime daripada selama waktu kompilasi. Polimorfisme waktu eksekusi dicapai melalui pengimbaikan fungsi. Fungsi yang akan dipanggil ditetapkan selama runtime.

Pengimbaikan Fungsi

Pengimbaikan fungsi terjadi ketika fungsi dari kelas dasar diberi definisi baru dalam kelas turunan. Pada saat itu, kita dapat mengatakan fungsi dasar telah diimbaiki.

Contoh:

 #include <iostream> using namespace std; class Mammal { public: void eat() { cout << "Mammals eat..."; } }; class Cow: public Mammal { public: void eat() { cout << "Cows eat grass..."; } }; int main(void) { Cow c = Cow(); c.eat(); return 0; } 

Output:

Polimorfisme C++ Dijelaskan: Contoh Praktis & Konsep Kunci

Berikut adalah screenshot kode:

Polimorfisme C++ Dijelaskan: Contoh Praktis & Konsep Kunci

Penjelasan Kode:

  1. Impor file header iostream ke dalam program kami untuk menggunakan fungsinya.
  2. Sertakan namespace std ke dalam program kami untuk menggunakan kelasnya tanpa memanggilnya.
  3. Buat kelas bernama Mammal. Tanda { menandai awal tubuh kelas.
  4. Gunakan pengubah akses public untuk mengatur fungsi yang akan kita buat sebagai dapat diakses secara publik. Ini akan dapat diakses dari luar kelas ini.
  5. Buat fungsi publik bernama eat. Tanda { menandai awal tubuh fungsi.
  6. Cetak pernyataan yang ditambahkan ke fungsi cout saat fungsi eat() dipanggil.
  7. Akhir tubuh fungsi eat().
  8. Akhir tubuh kelas Mammal.
  9. Buat kelas bernama Cow yang mewarisi kelas Mammal. Cow adalah kelas turunan, sementara Mammal adalah kelas dasar. Tanda { menandai awal kelas ini.
  10. Gunakan pengubah akses public untuk menandai fungsi yang akan kita buat sebagai dapat diakses secara publik. Ini akan dapat diakses dari luar kelas ini.
  11. Imbaiki fungsi eat() yang didefinisikan dalam kelas dasar. Tanda { menandai awal tubuh fungsi.
  12. Pernyataan yang akan dicetak ke konsol saat fungsi ini dipanggil.
  13. Akhir tubuh fungsi eat().
  14. Akhir tubuh kelas Cow.
  15. Panggil fungsi main(). Tanda { menandai awal tubuh fungsi ini.
  16. Buat instance kelas Cow dan beri nama c.
  17. Panggil fungsi eat() yang didefinisikan dalam kelas Cow.
  18. Program harus mengembalikan nilai setelah penyelesaian sukses.
  19. Akhir fungsi main.

Fungsi Virtual C++

Fungsi virtual adalah cara lain untuk mengimplementasikan polimorfisme waktu eksekusi dalam C++. Ini adalah fungsi khusus yang didefinisikan dalam kelas dasar dan diimbaikan dalam kelas turunan. Untuk mendeklarasikan fungsi virtual, Anda harus menggunakan kata kunci virtual. Kata kunci harus mendahului deklarasi fungsi dalam kelas dasar.

Jika kelas virtual diwarisi, kelas virtual mengimbaiki fungsi virtual untuk menyesuaikan kebutuhannya. Contoh:

 #include <iostream> using namespace std; class ClassA { public: virtual void show() { cout << "The show() function in base class invoked..." << endl; } }; class ClassB :public ClassA { public: void show() { cout << "The show() function in derived class invoked..."; } }; int main() { ClassA* a; ClassB b; a = &b; a->show(); } 

Output:

Polimorfisme C++ Dijelaskan: Contoh Praktis & Konsep Kunci

Berikut adalah screenshot kode:

Polimorfisme C++ Dijelaskan: Contoh Praktis & Konsep Kunci

Penjelasan Kode:

  1. Sertakan file header iostream dalam kode untuk menggunakan fungsinya.
  2. Sertakan namespace std dalam kode kami untuk menggunakan kelasnya tanpa memanggilnya.
  3. Buat kelas bernama ClassA.
  4. Gunakan pengubah akses public untuk menandai anggota kelas sebagai dapat diakses secara publik.
  5. Buat fungsi virtual bernama show(). Ini akan menjadi fungsi publik.
  6. Teks yang akan dicetak saat show() dipanggil. Tanda endl adalah kata kunci C++, yang berarti akhir baris. Ini memindahkan kursor mouse ke baris berikutnya.
  7. Akhir tubuh fungsi virtual show().
  8. Akhir tubuh kelas ClassA.
  9. Membuat kelas baru bernama ClassB yang mewarisi kelas ClassA. ClassA menjadi kelas dasar sementara ClassB menjadi kelas turunan.
  10. Gunakan pengubah akses public untuk menandai anggota kelas sebagai dapat diakses secara publik.
  11. Definisikan ulang fungsi virtual show() yang diimbaikan dari kelas dasar.
  12. Teks yang akan dicetak ke konsol saat fungsi show() yang didefinisikan dalam kelas turunan dipanggil.
  13. Akhir tubuh fungsi show().
  14. Akhir tubuh kelas turunan, ClassB.
  15. Panggil fungsi main(). Logika program harus ditambahkan dalam tubuhnya.
  16. Buat variabel pointer bernama a. Ia menunjuk ke kelas bernama ClassA.
  17. Buat instance kelas bernama ClassB. Instance diberi nama b.
  18. Tetapkan nilai yang disimpan dalam alamat b ke variabel a.
  19. Panggil fungsi show() yang didefinisikan dalam kelas turunan. Binding lambat telah diimplementasikan.
  20. Akhir tubuh fungsi main().

Polimorfisme Waktu Kompilasi Vs. Polimorfisme Waktu Eksekusi

Berikut adalah perbedaan utama antara keduanya:

Polimorfisme waktu kompilasi Polimorfisme waktu eksekusi Ini juga disebut early binding atau polimorfisme statis Ini juga disebut late/dynamic binding atau polimorfisme dinamis Metode dipanggil selama waktu kompilasi Metode dipanggil selama waktu eksekusi Diimplementasikan melalui pengoverloadan fungsi dan pengoverloadan operator Diimplementasikan melalui pengimbaikan metode dan fungsi virtual Contoh, pengoverloadan metode. Banyak metode mungkin memiliki nama yang serupa tetapi jumlah atau tipe argumen yang berbeda Contoh, pengimbaikan metode. Banyak metode mungkin memiliki nama yang serupa dan prototipe yang sama. Eksekusi lebih cepat karena penemuan metode dilakukan selama waktu kompilasi Eksekusi lebih lambat karena penemuan metode dilakukan selama runtime. Fleksibilitas untuk pemecahan masalah kurang karena semuanya diketahui selama waktu kompilasi. Fleksibilitas lebih besar untuk menyelesaikan masalah kompleks karena metode ditemukan selama runtime.

Ringkasan:


Bahasa C

  1. Cara Meneruskan Array ke Fungsi dalam C++: Panduan Praktis
  2. Operator C++ Dijelaskan: Tipe, Contoh, dan Program Contoh
  3. Menguasai Switch-Case C++: Sintaks, Penggunaan, dan Contoh Praktis
  4. Menguasai Alokasi Array Dinamis C++: Panduan Praktis dengan Contoh Kode
  5. Pengoverloadan Operator C++ – Panduan Praktis dengan Contoh Kode
  6. Struct C++ Dijelaskan dengan Contoh Praktis
  7. Menguasai std::list dalam C++: Sintaks, Fungsi & Contoh Praktis
  8. Fungsi C++ Dijelaskan dengan Contoh Kode Praktis
  9. Struktur vs Kelas C++: Perbedaan Utama, Sintaks, dan Kasus Penggunaan Terbaik
  10. calloc() dalam C: Alokasi Memori Diinisialisasi Nol dan Contoh Praktis