zoukankan      html  css  js  c++  java
  • 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”。

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

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

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

      

  • 相关阅读:
    数据库备份 DBS(Database Backup),知识点
    关系型数据库 RDS(Relational Database Service),知识点
    对象存储服务 OSS(Object Storage Service),知识点(待补充上仓库代码)
    Java 为什么需要包装类,如何使用包装类?
    for each 语句
    缓存中,2个注解:@cacheable 与 @cacheput 的区别
    微信小程序,相关代码
    微信小程序中的事件
    通俗易懂:索引、单列索引、复合索引、主键、唯一索引、聚簇索引、非聚簇索引、唯一聚簇索引 的区别与联系
    MySQL 的各种 join
  • 原文地址:https://www.cnblogs.com/yyc954330712/p/9470581.html
Copyright © 2011-2022 走看看