Bahasa C
Kata polimorfisme berarti memiliki banyak bentuk. Biasanya, polimorfisme terjadi ketika ada hierarki kelas dan mereka terkait dengan pewarisan.
Polimorfisme C++ berarti bahwa panggilan ke fungsi anggota akan menyebabkan fungsi yang berbeda dijalankan tergantung pada jenis objek yang memanggil fungsi tersebut.
Perhatikan contoh berikut di mana kelas dasar diturunkan oleh dua kelas lainnya
Demo Langsung#include <iostream> using namespace std; class Shape { protected: int width, height; public: Shape( int a = 0, int b = 0){ width = a; height = b; } int area() { cout << "Parent class area :" <<endl; return 0; } }; class Rectangle: public Shape { public: Rectangle( int a = 0, int b = 0):Shape(a, b) { } int area () { cout << "Rectangle class area :" <<endl; return (width * height); } }; class Triangle: public Shape { public: Triangle( int a = 0, int b = 0):Shape(a, b) { } int area () { cout << "Triangle class area :" <<endl; return (width * height / 2); } }; // Main function for the program int main() { Shape *shape; Rectangle rec(10,7); Triangle tri(10,5); // store the address of Rectangle shape = &rec; // call rectangle area. shape->area(); // store the address of Triangle shape = &tri; // call triangle area. shape->area(); return 0; }
Ketika kode di atas dikompilasi dan dieksekusi, menghasilkan hasil sebagai berikut
Parent class area : Parent class area :
Alasan untuk keluaran yang salah adalah bahwa panggilan fungsi area() sedang disetel sekali oleh kompilator sebagai versi yang didefinisikan di kelas dasar. Ini disebut resolusi statis panggilan fungsi, atau tautan statis - pemanggilan fungsi diperbaiki sebelum program dijalankan. Ini juga terkadang disebut pengikatan awal karena fungsi area() disetel selama kompilasi program.
Tapi sekarang, mari kita membuat sedikit modifikasi pada program kita dan mendahului deklarasi area() di kelas Shape dengan kata kunci virtual sehingga terlihat seperti ini
class Shape { protected: int width, height; public: Shape( int a = 0, int b = 0) { width = a; height = b; } virtual int area() { cout << "Parent class area :" <<endl; return 0; } };
Setelah sedikit modifikasi ini, ketika kode contoh sebelumnya dikompilasi dan dijalankan, menghasilkan hasil berikut
Rectangle class area Triangle class area
Kali ini, kompiler melihat isi dari pointer, bukan tipenya. Oleh karena itu, karena alamat objek dari kelas tri dan rec disimpan dalam *bentuk, fungsi area() masing-masing dipanggil.
Seperti yang Anda lihat, masing-masing kelas anak memiliki implementasi terpisah untuk area fungsi(). Beginilah cara polimorfisme umumnya digunakan. Anda memiliki kelas yang berbeda dengan fungsi dengan nama yang sama, dan bahkan parameter yang sama, tetapi dengan implementasi yang berbeda.
Sebuah virtual function adalah sebuah fungsi di kelas dasar yang dideklarasikan menggunakan kata kunci virtual . Mendefinisikan fungsi virtual di kelas dasar, dengan versi lain di kelas turunan, memberi sinyal kepada kompiler bahwa kita tidak menginginkan hubungan statis untuk fungsi ini.
Apa yang kita inginkan adalah pemilihan fungsi yang akan dipanggil pada titik tertentu dalam program yang didasarkan pada jenis objek yang dipanggil. Operasi semacam ini disebut sebagai hubungan dinamis , atau terlambat mengikat .
Ada kemungkinan bahwa Anda ingin memasukkan fungsi virtual di kelas dasar sehingga dapat didefinisikan ulang di kelas turunan agar sesuai dengan objek kelas itu, tetapi tidak ada definisi bermakna yang dapat Anda berikan untuk fungsi di kelas dasar .
Kita dapat mengubah area fungsi virtual() di kelas dasar menjadi berikut
class Shape { protected: int width, height; public: Shape(int a = 0, int b = 0) { width = a; height = b; } // pure virtual function virtual int area() = 0; };
The =0 memberitahu compiler bahwa fungsi tidak memiliki tubuh dan fungsi virtual di atas akan disebut fungsi virtual murni .
Bahasa C
Apa itu Kelas? Kelas C++ menggabungkan data dan metode untuk memanipulasi data menjadi satu. Kelas juga menentukan bentuk objek. Data dan metode yang terkandung dalam sebuah kelas dikenal sebagai anggota kelas. Kelas adalah tipe data yang ditentukan pengguna. Untuk mengakses anggota kelas, kami men
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.
1) Jelaskan apa itu kelas dalam C++? Kelas dalam C++ dapat didefinisikan sebagai kumpulan fungsi dan data terkait di bawah satu nama. Ini adalah cetak biru objek. Program C++ dapat terdiri dari sejumlah kelas. 2) Bagaimana Anda bisa menentukan kelas di C++? Dengan menggunakan kata kunci kelas d
Apa itu Warisan dalam C#? Warisan adalah konsep penting dari C#. Warisan adalah konsep di mana Anda mendefinisikan kelas induk dan kelas anak. Kelas anak mewarisi metode dan properti dari kelas induk, tetapi pada saat yang sama, mereka juga dapat mengubah perilaku metode jika diperlukan. Kelas anak