Рубрики

Полиморфизм в C ++

Слово полиморфизм означает наличие многих форм. Проще говоря, мы можем определить полиморфизм как способность сообщения отображаться в более чем одной форме.
Реальный пример полиморфизма у человека при этом может иметь разные характеристики. Как мужчина одновременно является отцом, мужем, наемным работником. Таким образом, один и тот же человек обладает разным поведением в разных ситуациях. Это называется полиморфизмом.
Полиморфизм рассматривается как одна из важных особенностей объектно-ориентированного программирования.
В C ++ полиморфизм в основном делится на два типа:

  • Время компиляции Полиморфизм
  • Полиморфизм времени выполнения

  1. Полиморфизм времени компиляции : этот тип полиморфизма достигается перегрузкой функций или перегрузкой операторов.
    • Перегрузка функций : если существует несколько функций с одинаковыми именами, но разными параметрами, то считается, что эти функции перегружены . Функции могут быть перегружены путем изменения количества аргументов и / или изменения типа аргументов .
      Правила перегрузки функций

      // C ++ программа для перегрузки функций
      #include <bits/stdc++.h>

        

      using namespace std;

      class Geeks

      {

          public:

            

          // функция с параметром 1 int

          void func(int x)

          {

              cout << "value of x is " << x << endl;

          }

            

          // функция с тем же именем, но с 1 двойным параметром

          void func(double x)

          {

              cout << "value of x is " << x << endl;

          }

            

          // функция с тем же именем и 2 int параметрами

          void func(int x, int y)

          {

              cout << "value of x and y is " << x << ", " << y << endl;

          }

      };

        

      int main() {

            

          Geeks obj1;

            

          // Какая функция будет вызвана, будет зависеть от переданных параметров

          // Первый 'func' называется

          obj1.func(7);

            

          // Второй 'func' называется

          obj1.func(9.132);

            

          // Третий 'func' называется

          obj1.func(85,64);

          return 0;

      Выход:

      value of x is 7
      value of x is 9.132
      value of x and y is 85, 64
      

      В приведенном выше примере одна функция с именем func действует по-разному в трех различных ситуациях, что является свойством полиморфизма.

    • Перегрузка операторов : C ++ также предоставляет возможность перегрузки операторов. Например, мы можем сделать оператор ('+') для строкового класса, чтобы объединить две строки. Мы знаем, что это оператор сложения, задача которого состоит в добавлении двух операндов. Таким образом, один оператор '+', помещенный между целочисленными операндами, добавляет их, а когда помещается между строковыми операндами, объединяет их.
      Пример :

      // Программа CPP для иллюстрации
      // Перегрузка оператора
      #include<iostream>

      using namespace std;

         

      class Complex {

      private:

          int real, imag;

      public:

          Complex(int r = 0, int i =0)  {real = r;   imag = i;}

             

          // Это автоматически вызывается, когда '+' используется с

          // между двумя сложными объектами

          Complex operator + (Complex const &obj) {

               Complex res;

               res.real = real + obj.real;

               res.imag = imag + obj.imag;

               return res;

          }

          void print() { cout << real << " + i" << imag << endl; }

      };

         

      int main()

      {

          Complex c1(10, 5), c2(2, 4);

          Complex c3 = c1 + c2; // Пример вызова "operator +"

          c3.print();

      }

      Выход:

      12 + i9
      

      В приведенном выше примере оператор '+' перегружен. Оператор «+» является оператором сложения и может добавлять два числа (целые или с плавающей запятой), но здесь оператор предназначен для сложения двух мнимых или комплексных чисел. Чтобы узнать подробнее о перегрузке оператора, перейдите по этой ссылке.

  2. Полиморфизм во время выполнения : этот тип полиморфизма достигается переопределением функции.
    • С другой стороны, переопределение функций происходит, когда у производного класса есть определение для одной из функций-членов базового класса. Эта базовая функция называется переопределенной .

      // C ++ программа для переопределения функций

        
      #include <bits/stdc++.h>

      using namespace std;

        

      class base

      {

      public:

          virtual void print ()

          { cout<< "print base class" <<endl; }

         

          void show ()

          { cout<< "show base class" <<endl; }

      };

         

      class derived:public base

      {

      public:

          void print () // print () уже является виртуальной функцией в производном классе, мы также можем явно объявить ее как виртуальную void print ()

          { cout<< "print derived class" <<endl; }

         

          void show ()

          { cout<< "show derived class" <<endl; }

      };

        
      //основная функция

      int main() 

      {

          base *bptr;

          derived d;

          bptr = &d;

             

          // виртуальная функция, связанная во время выполнения (полиморфизм времени выполнения)

          bptr->print(); 

             

          // Не виртуальная функция, связанная во время компиляции

          bptr->show(); 

        

          return 0;

      Выход:

      print derived class
      show base class
      

      Чтобы узнать подробности полиморфизма во время выполнения, перейдите по этой ссылке.

Эта статья предоставлена Суровым Агарвалом . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Полиморфизм в C ++

0.00 (0%) 0 votes