C++ override 关键字用法

本文详细解析了C++中override关键字的用法及重要性。通过具体示例,阐述了如何使用override来确保派生类正确重写基类的虚函数,以及在未正确使用时可能遇到的编译问题。强调了override关键字对于代码安全性和正确性的关键作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++ override 关键字用法

原文出处:https://blog.youkuaiyun.com/xiaoheibaqi/article/details/51272009
作者:xiaoheibaqi 
来源:优快云 
原文:https://blog.youkuaiyun.com/xiaoheibaqi/article/details/51272009 
版权声明:本文为博主原创文章,转载请附上博文链接!

  1. override关键字作用: 
    如果派生类在虚函数声明时使用了override描述符,那么该函数必须重载其基类中的同名函数,否则代码将无法通过编译。
  2. 举例子说明
    struct Base 
    {
        virtual void Turing() = 0;
        virtual void Dijkstra() = 0;
        virtual void VNeumann(int g) = 0;
        virtual void DKnuth() const;
        void Print();
    };
    struct DerivedMid: public Base 
    {
        // void VNeumann(double g);
        //接口被隔离了,曾想多一个版本的VNeumann函数
    };
    struct DerivedTop : public DerivedMid 
    {
        void Turing() override;
        void Dikjstra() override; //无法通过编译,拼写错误,并非重载
        void VNeumann(double g) override; //无法通过编译,参数不一致,并非重载    
    void DKnuth() override; //无法通过编译,常量性不一致,并非重载
    void Print() override; //无法通过编译,非虚函数重载
    };

     

(之前听过,但是没看过结构体重载 ==)

  1. 如果没有使用override关键字,上面的写法编译可以通过但是运行的效果与真实意愿(希望重载)不符
  2. 举例子说明
    class testoverride
    {
    public:
        testoverride(void);
        ~testoverride(void);
        virtual void show() const = 0;
        virtual int infor() = 0;
        virtual void test() = 0;
        virtual int spell() = 0;
    };
    
    class B: public testoverride
    {
    public:
        virtual void show();     //1
        virtual void infor();    //2
        virtual void vmendd();   //3
    virtual void test(int x);//4
    virtual void splle();    //5 
    };

     

上面的1-5个重载函数编译过程中,除了返回值不同的infor会报错以外,其他函数都不会有问题,但是在类实例化的时候会提示是抽象类,因为他们都没有真正实现重载

class C: public testoverride
{
public:
    virtual void show() override;
    virtual void infor() override;   
    virtual void vmendd() override;
    virtual void test(int x) override;
    virtual void splle() override;
};

加了override以后,会在编译器override修饰符则可以保证编译器辅助地做一些检查,上面的情况无法通过编译

  1. 结论 
    如果派生类里面是像重载虚函数 就加上关键字override 这样编译器可以辅助检查是不是正确重载,如果没加这个关键字 也没什么严重的error 只是少了编译器检查的安全性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值