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

Polimorfisme C++ dengan Contoh

Apa itu Polimorfisme dalam C++?

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

Misalnya, kita memiliki fungsi makeSound(). Saat kucing memanggil fungsi ini, ia akan menghasilkan suara meong. Ketika seekor sapi memanggil fungsi yang sama, itu akan memberikan suara moow.

Meskipun kita memiliki satu fungsi, ia berperilaku berbeda dalam situasi yang berbeda. Fungsi memiliki banyak bentuk; karenanya, kami telah mencapai polimorfisme.

Dalam tutorial C++ ini, Anda akan belajar:

Jenis Polimorfisme

C++ mendukung dua jenis polimorfisme:

Polimorfisme Waktu Kompilasi

Anda memanggil fungsi kelebihan beban dengan mencocokkan jumlah dan jenis argumen. Informasi ini hadir selama waktu kompilasi. Ini berarti kompiler C++ akan memilih fungsi yang tepat pada waktu kompilasi.

Polimorfisme waktu kompilasi dicapai melalui kelebihan fungsi dan kelebihan beban operator.

Fungsi Kelebihan Beban

Fungsi overloading terjadi ketika kita memiliki banyak fungsi dengan nama yang mirip tetapi argumen yang berbeda. Argumen mungkin berbeda dalam hal jumlah atau jenis.

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;
}

Keluaran:

Berikut adalah screenshot kodenya:

Penjelasan Kode:

  1. Sertakan file header iostream ke dalam kode kita. Kita akan dapat menggunakan fungsinya.
  2. Sertakan ruang nama std dalam kode kita. Kami akan dapat menggunakan kelasnya tanpa memanggilnya.
  3. Buat fungsi bernama test yang mengambil parameter integer i. { menandai awal dari tubuh tes fungsi.
  4. Pernyataan yang akan dieksekusi jika tes fungsi di atas dipanggil/dipanggil.
  5. Akhir dari isi tes fungsi di atas.
  6. Buat fungsi bernama test yang mengambil parameter float f. { menandai awal dari tubuh tes fungsi.
  7. Pernyataan yang akan dieksekusi jika tes fungsi di atas dipanggil/dipanggil.
  8. Akhir dari isi tes fungsi di atas.
  9. Buat fungsi bernama test yang mengambil parameter karakter ch. { menandai awal dari tubuh tes fungsi.
  10. Pernyataan yang akan dieksekusi jika tes fungsi di atas dipanggil/dipanggil.
  11. Akhir dari isi tes fungsi di atas.
  12. Panggil fungsi main(). { menandai awal dari tubuh fungsi.
  13. Panggil tes fungsi dan berikan 5 ke sana sebagai nilai argumen. Ini memanggil fungsi pengujian yang menerima argumen integer, yaitu, fungsi pengujian pertama.
  14. Panggil tes fungsi dan berikan 5,5 ke sana sebagai nilai argumen. Ini akan memanggil fungsi pengujian yang menerima argumen float, yaitu, fungsi pengujian kedua.
  15. Panggil tes fungsi dan berikan lima padanya sebagai nilai argumen. Ini akan memanggil fungsi pengujian yang menerima argumen karakter, yaitu fungsi pengujian ketiga.
  16. Program harus mengembalikan nilai jika berhasil dijalankan.
  17. Akhir dari isi fungsi main().

Kami memiliki tiga fungsi dengan nama yang sama tetapi jenis argumen yang berbeda. Kami telah mencapai polimorfisme.

Operator Kelebihan Beban

Dalam Operator Overloading, kami mendefinisikan arti baru untuk operator C++. Ini juga mengubah cara kerja operator. Sebagai contoh, kita dapat mendefinisikan operator + untuk menggabungkan dua string. Kita mengenalnya sebagai operator penjumlahan untuk menjumlahkan nilai numerik. Setelah definisi kami, ketika ditempatkan di antara bilangan bulat, itu akan menambahkannya. Ketika ditempatkan di antara string, itu 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();
}

Keluaran:

Berikut adalah screenshot kodenya:

Penjelasan Kode:

  1. Sertakan file header iostream ke dalam program kami untuk menggunakan fungsinya.
  2. Sertakan namespace std ke dalam program kita untuk menggunakan kelasnya tanpa memanggilnya.
  3. Buat kelas bernama ComplexNum. { menandai awal dari badan kelas.
  4. Gunakan pengubah akses pribadi untuk menandai variabel sebagai pribadi, artinya variabel tersebut hanya dapat diakses dari dalam kelas.
  5. Mendefinisikan dua variabel integer, real dan over.
  6. Gunakan pengubah akses publik untuk menandai konstruktor sebagai publik, artinya konstruktor akan dapat diakses bahkan dari luar kelas.
  7. Buat konstruktor kelas dan inisialisasi variabel.
  8. Inisialisasi nilai variabel real.
  9. Inisialisasi nilai variabel.
  10. Akhir dari badan konstruktor.
  11. Kita perlu mengganti arti dari operator +.
  12. Buat hasil tipe data 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 angka ke bagian imajiner dari angka lain.
  15. Program akan mengembalikan nilai hasil variabel setelah eksekusi berhasil.
  16. Akhir dari definisi arti baru operator +, yaitu overloading.
  17. Panggil metode print().
  18. Cetak bilangan kompleks baru setelah penambahan di konsol.
  19. Akhir dari isi fungsi print().
  20. Akhir dari isi kelas ComplexNum.
  21. Panggil fungsi main().
  22. Meneruskan nilai dari bagian real dan kompleks 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 kelebihan beban dan simpan hasilnya dalam variabel c3.
  24. Cetak nilai variabel c3 di konsol.
  25. Akhir dari isi fungsi main().

Polimorfisme Waktu Proses

Ini terjadi ketika metode objek dipanggil/dipanggil selama runtime daripada selama waktu kompilasi. Polimorfisme runtime dicapai melalui penggantian fungsi. Fungsi yang akan dipanggil/dipanggil dibuat selama runtime.

Penggantian Fungsi

Fungsi overriding terjadi ketika fungsi dari kelas dasar diberikan definisi baru di kelas turunan. Pada saat itu, kita dapat mengatakan bahwa fungsi dasar telah diganti.

Misalnya:

#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;

}

Keluaran:

Berikut adalah screenshot kodenya:

Penjelasan Kode:

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

Fungsi Virtual C++

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

Jika kelas fungsi virtual diwarisi, kelas virtual mendefinisikan ulang fungsi virtual agar sesuai dengan kebutuhannya. Misalnya:

#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();      
	}

Keluaran:

Berikut adalah screenshot kodenya:

Penjelasan Kode:

  1. Sertakan file header iostream dalam kode untuk menggunakan fungsinya.
  2. Sertakan namespace std dalam kode kita untuk menggunakan kelasnya tanpa memanggilnya.
  3. Buat kelas bernama ClassA.
  4. Gunakan pengubah akses publik untuk menandai anggota kelas sebagai dapat diakses publik.
  5. Buat fungsi virtual bernama show(). Ini akan menjadi fungsi publik.
  6. Teks yang akan dicetak saat show() dipanggil dipanggil. Endl adalah kata kunci C++, yang berarti garis akhir. Ini memindahkan kursor mouse ke baris berikutnya.
  7. Akhir dari isi fungsi virtual show().
  8. Akhir dari isi kelas ClassA.
  9. Membuat class baru bernama ClassB yang mewarisi class ClassA. ClassA menjadi kelas dasar sedangkan ClassB menjadi kelas turunan.
  10. Gunakan pengubah akses publik untuk menandai anggota kelas sebagai dapat diakses publik.
  11. Mendefinisikan ulang fungsi virtual show() yang diturunkan di kelas dasar.
  12. Teks yang akan dicetak di konsol saat fungsi show() yang didefinisikan di kelas turunan dipanggil.
  13. Akhir dari isi fungsi show().
  14. Akhir dari badan kelas turunan, KelasB.
  15. Panggil fungsi main(). Logika program harus ditambahkan di dalam tubuhnya.
  16. Buat variabel pointer bernama a. Ini menunjuk ke kelas bernama ClassA.
  17. Buat instance kelas bernama ClassB. Instance diberi nama b.
  18. Menetapkan nilai yang disimpan di alamat b dalam variabel a.
  19. Memanggil fungsi show() yang didefinisikan di kelas turunan. Pengikatan terlambat telah diterapkan.
  20. Akhir dari isi fungsi main().

Polimorfisme Waktu Kompilasi Vs. Polimorfisme Waktu Proses

Berikut adalah perbedaan utama antara keduanya:

Polimorfisme waktu kompilasi Polimorfisme waktu proses Ini juga disebut pengikatan awal atau polimorfisme statis Ini juga disebut pengikatan lambat/dinamis atau polimorfisme dinamisMetode ini dipanggil/dipanggil selama waktu kompilasiMetode ini dipanggil/dipanggil selama run timeDiimplementasikan melalui kelebihan fungsi dan kelebihan beban operatorDiimplementasikan melalui penggantian metode dan fungsi virtualContoh, kelebihan metode. Banyak metode mungkin memiliki nama yang mirip tetapi jumlah atau tipe argumen yang berbedaContoh, penggantian metode. Banyak metode mungkin memiliki nama yang mirip dan prototipe yang sama. Eksekusi lebih cepat karena penemuan metode dilakukan selama waktu kompilasi Eksekusi lebih lambat karena penemu metode dilakukan selama runtime. Lebih sedikit fleksibilitas untuk pemecahan masalah disediakan karena semuanya diketahui selama waktu kompilasi. Banyak fleksibilitas disediakan untuk memecahkan masalah yang kompleks karena metode ditemukan selama runtime.

Ringkasan:


Bahasa C

  1. Melewati Array ke Fungsi dalam Pemrograman C++
  2. Operator di C++ dengan Contoh:Apa itu, Jenis dan Program
  3. C++ Switch Case Statement dengan CONTOH
  4. C++ Alokasi Dinamis Array dengan Contoh
  5. Operator C++ Overloading dengan Contoh
  6. Struktur C++ Dengan Contoh
  7. std::daftar di C++ dengan Contoh
  8. Fungsi C++ dengan Contoh Program
  9. Perbedaan antara Struktur dan Kelas:Dijelaskan dengan Contoh C++
  10. calloc() Fungsi di C Library dengan Program CONTOH