📜  C++中的多态

📅  最后修改于: 2021-05-30 20:13:56             🧑  作者: Mango

多态性一词意味着具有多种形式。简而言之,我们可以将多态定义为消息以多种形式显示的能力。一个真实的多态示例,一个人同时可以具有不同的特征。像男人一样,是父亲,丈夫,雇员。因此,同一个人在不同情况下具有不同的行为。这称为多态。多态被认为是面向对象编程的重要特征之一。

在C++中,多态性主要分为两种类型:

  • 编译时多态
  • 运行时多态

CPP中的多态性

  1. 编译时多态性:这种类型的多态性是通过函数重载或运算符重载来实现的。

    • 函数重载:如果有多个具有相同名称但参数不同的函数,则称这些函数为重载。可以通过更改参数数量或/和更改参数类型来重载函数
      函数重载规则
      // C++ program for function overloading
      #include 
        
      using namespace std;
      class Geeks
      {
          public:
            
          // function with 1 int parameter
          void func(int x)
          {
              cout << "value of x is " << x << endl;
          }
            
          // function with same name but 1 double parameter
          void func(double x)
          {
              cout << "value of x is " << x << endl;
          }
            
          // function with same name and 2 int parameters
          void func(int x, int y)
          {
              cout << "value of x and y is " << x << ", " << y << endl;
          }
      };
        
      int main() {
            
          Geeks obj1;
            
          // Which function is called will depend on the parameters passed
          // The first 'func' is called 
          obj1.func(7);
            
          // The second 'func' is called
          obj1.func(9.132);
            
          // The third 'func' is called
          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 program to illustrate
      // Operator Overloading
      #include
      using namespace std;
         
      class Complex {
      private:
          int real, imag;
      public:
          Complex(int r = 0, int i =0)  {real = r;   imag = i;}
             
          // This is automatically called when '+' is used with
          // between two Complex objects
          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; // An example call to "operator+"
          c3.print();
      }
      

      输出:

      12 + i9
      

      在上面的示例中,运算符“ +”超载。运算符“ +”是加法运算符,可以将两个数字(整数或浮点数)相加,但此处使该运算符执行两个虚数或复数的加法运算。要详细了解运算符重载,请访问此链接。

  2. 运行时多态性:这种类型的多态性是通过函数覆盖实现的。
    • 另一方面,当派生类为基类的成员函数之一定义时,就会发生函数重写。据说该基本函数已被覆盖
      // C++ program for function overriding
        
      #include 
      using namespace std;
        
      class base
      {
      public:
          virtual void print ()
          { cout<< "print base class" <print(); 
             
          // Non-virtual function, binded at compile time
          bptr->show(); 
        
          return 0;
      } 
      

      输出:

      print derived class
      show base class
      

      要详细了解运行时多态性,请访问此链接。

要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”