【c++】: 多态

说明

C++多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数;

形成多态必须具备三个条件:

1、必须存在继承关系;

2、继承关系必须有同名虚函数(其中虚函数是在基类中使用关键字Virtual声明的函数,在派生类中重新定义基类中定义的虚函数时,会告诉编译器不要静态链接到该函数);

3、存在基类类型的指针或者引用,通过该指针或引用调用虚函数;

例子

1.在 Shape 类中,area() 的声明前不放置关键字 virtual

#include  
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); 
      }
};
// 程序的主函数
int main( )
{
     
   Shape *shape;
   Rectangle rec(10,7);
   Triangle  tri(10,5);
 
   // 存储矩形的地址
   shape = &rec;
   // 调用矩形的求面积函数 area
   shape->area();
 
   // 存储三角形的地址
   shape = &tri;
   // 调用三角形的求面积函数 area
   shape->area();
   
   return 0;
}

输出:

Parent class area
Parent class area

2.在 Shape 类中,area() 的声明前放置关键字 virtual

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;
      }
};

输出:

Rectangle class area
Triangle class area

你可能感兴趣的:(c++,多态,c++)