广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >c++的virtual和override作用及说明
  • 813
分享到

c++的virtual和override作用及说明

c++的virtualc++的verridevirtual和override作用 2022-11-13 19:11:36 813人浏览 泡泡鱼
摘要

目录一、概述二、测试代码三、输出四、总结一、概述 c++的virtual提供了运行时的多态,可以用基类的指针调用子类对象的函数,通过override可以强制要求基类有对应的虚函数。

一、概述

c++的virtual提供了运行时的多态,可以用基类的指针调用子类对象的函数,通过override可以强制要求基类有对应的虚函数。

二、测试代码

#pragma once
#include <stdio.h>
class Base
{
public:
    void A_1() 
    {
        printf("Base::A_1\n");
    };
    virtual void A_2() 
    {
        printf("Base::A_2\n");
    }
    virtual void A_3() 
    {
        printf("Base::A_3\n");
    }

    virtual void A_4()
    {
        printf("Base::A_4\n");
    }

    void A_5() 
    {
        printf("Base::A_5\n");
    }
};

class Drived : public Base
{
public:
    void A_1() //覆盖了基类的函数,用基类指针调用时调用到的时基类的A_1,用子类指针调用时调用到的时子类的A_1
    {
        printf("Drived::A_1\n");
    };
    virtual void A_2() //用基类或子类指针都调用到的是子类的A_2,之类的virtual说明的是是子类的A_2还可以被virtual
    {
        printf("Drived::A_2\n");
    }
    void A_3() //用基类或子类指针都调用到的是子类的A_2
    {
        printf("Drived::A_3\n");
    }

    virtual void A_4() override //子类加上override,如果基类没有对应virtual函数就会编译错误。避免拼错和记错没有重写基类函数
    {
        printf("Drived::A_4\n");
    }
    
};

class Drived2 : public Drived
{
public:
    void A_2() override 
    {
        printf("Drived2::A_2\n");
    }
    void A_3()  override//用基类或子类指针都调用到的是子类的A_2
    {
        printf("Drived2::A_3\n");
    }
};

class VirtualTest
{
public:
    void DoTest()
    {
        Drived *drived = new Drived();
        Base *base = drived;
        base->A_1();
        drived->A_1();
        printf("\n");

        base->A_2();
        drived->A_2();
        printf("\n");

        base->A_3();
        drived->A_3();
        printf("\n");

        base->A_4();
        drived->A_4();
        printf("\n");

        Drived2 *drived2 = new Drived2();
        base = drived2;
        drived = drived2;
        
        base->A_2();
        drived->A_2();
        drived2->A_2();
        printf("\n");

        base->A_3();
        drived->A_3();
        drived2->A_3();

    }
};

三、输出

Base::A_1
Drived::A_1

Drived::A_2
Drived::A_2

Drived::A_3
Drived::A_3

Drived::A_4
Drived::A_4

Drived2::A_2
Drived2::A_2
Drived2::A_2

Drived2::A_3
Drived2::A_3
Drived2::A_3

四、总结

1、基类函数没加virtual,子类有相同函数,实现的是覆盖。用基类指针调用时,调用到的是基类的函数;用子类指针调用时,调用到的是子类的函数。

2、基类函数加了virtual时,实现的时重写。用基类指针或子类指针调用时,调用到的都是子类的函数。

3、函数加上override,强制要求基本相同函数需要是虚函数,否则会编译报错。

4、子类的virtual可加可不加,建议加override不加virtual。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: c++的virtual和override作用及说明

本文链接: https://www.lsjlt.com/news/170796.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作