c++ 多态 运行时多态和编译时多态_C++中的多态

c++ 多态 运行时多态和编译时多态_C++中的多态_第1张图片

多态性(polymorphism)一词意味着具有多种形式。简而言之,我们可以将多态定义为消息以多种形式显示的能力。

现实生活中的多态示例,一个人同时可以具有不同的特征。就像男人在同一时间是父亲,丈夫,雇员。 因此,同一个人在不同情况下具有不同的行为。这称为多态。

多态被认为是面向对象编程的重要特征之一。

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

  • 编译时多态
  • 运行时多态
c++ 多态 运行时多态和编译时多态_C++中的多态_第2张图片

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

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 7value of x is 9.132value of x and y is 85, 64

在上面的示例中,名为func的单个函数在三种不同情况下的行为不同,这是多态性的属性。

2)运算符重载: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" show();        return 0; }  

输出:

print derived classshow base class

你可能感兴趣的:(c++,多态,运行时多态和编译时多态)