C++中的多态

一、多态的概念

  面对对象的四个特性分别为抽象、封装、继承、多态。而多态的概念就是:如果子类中的成员函数对父类中的成员进行了覆盖,当一个指向子类的父类指针或引用了子类的父类引用,当使用它调用虚函数,然后根据实际的调用对象调用子类中的覆盖函数,而不是父类中的虚函数,这种语法现象叫多态。

二、多态的作用

  同一种类发出同一种调用,而产生不同的反映,也就是说,不论传递过来的究竟是那个类的对象,函数都能够通过同一个接口调用到适应各自对象的实现方法。主要目的也就是为了接口重用。

三、构成多态的条件

  1、多态特性除了父子类之间要构成覆盖,还必须是父类以指针或引用的方式来指向子类。

  2、当指针或引用已经构成多态时,此时调用成员所传的this指针再调用成员函数时也可以构造多态。

#include <iostream>using namespace std;
class A
{
protected:
    int num;
public:
    A()
    {
        show();
    }
    virtual A* show(int num=20)
    {
        cout << "A:" << num << endl;
    }
    ~A()
    {
        show();
    }
};
class B : public A
{
public:
    B()
    {

    }
    B* show(int num = 10)
    {
        cout << "B:" << num << endl;
    }
    ~B()
    {

    }
};
int main()
{
    B b;
}

   3、在子类的构造函数执行前会先调用父类的构造函数,如果调用了被覆盖的虚函数,由于子类还没有被构造完成,因此只能是调用父类中的虚函数。
 构造函数在进入函数体执行时,类中看得见的资源已经全部构造完成。
   4、在子类的析构函数执行完成后会再调用父类的析构函数,如果调用被覆盖的虚函数,由于子类已经析构完成,已经不能算是完整的子类了,因此只能调用父类中的虚函数。

四、C++中的虚函数

  成员函数在定义时添加了 virtual 这个关键字的函数就是虚函数。

  纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在函数原型后加“=0”。

  成员函数中有纯虚函数的叫抽象类,这种类不能创建对象。

  所有的成员函数都是纯虚函数,这种类叫纯抽象类。

  纯抽象类可以是类封装的一个过程,同时抽象类也可以当作一个统一的接口类。

  

原文地址:https://www.cnblogs.com/yyc954330712/p/9470581.html