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

Polimorfisme dalam 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.

Fungsi Virtual

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 .

Fungsi Virtual Murni

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

  1. Operator C++
  2. Melewati Array ke Fungsi dalam Pemrograman C++
  3. Kelas dan Objek C++
  4. Fungsi teman C++ dan Kelas teman
  5. Template Kelas C++
  6. Operator C++ Overloading dengan Contoh
  7. Kelas Penyimpanan di C++
  8. C++ Overloading (Operator dan Fungsi)
  9. Abstraksi Data dalam C++
  10. Enkapsulasi Data dalam C++