首页 > 编程语言 >C++ override关键字

C++ override关键字

时间:2022-10-25 23:22:39浏览次数:45  
标签:fun1 void virtual 关键字 C++ 派生类 override 重写

转自:https://blog.csdn.net/fanyun_01/article/details/79122136

1.介绍 

在派生类中,重写 (override) 继承自基类成员函数的实现 (implementation) 时,要满足如下条件:

  • 一虚:基类中,成员函数声明为虚拟的 (virtual)
  • 二容:基类和派生类中,成员函数的返回类型和异常规格 (exception specification) 必须兼容
  • 四同:基类和派生类中,成员函数名、形参类型、常量属性 (constness) 和 引用限定符 (reference qualifier) 必须完全相同

如此多的限制条件,导致了虚函数重写如上述代码,极容易因为一个不小心而出错。C++11 中的 override 关键字,可以显式的在派生类中声明,哪些成员函数需要被重写,如果没被重写,则编译器会报错。

#include <iostream>
using namespace std;
class Base {
public:
    virtual void fun1() const;
    virtual void fun2(int x);
    virtual void fun3() &;
    void fun4() const;    // is not declared virtual in Base
};
 
class Derived: public Base {
public:
    virtual void fun1() override;
    virtual void fun2(unsigned int x) override;
    virtual void fun3() && override;
    virtual void fun4() const override;
};

编译时会报错:

error: ‘virtual void Derived::fun1()’ marked ‘override’, but does not override
     virtual void fun1() override;

借助编译器检查该重写的方法是否重写了。

 

标签:fun1,void,virtual,关键字,C++,派生类,override,重写
From: https://www.cnblogs.com/BlueBlueSea/p/16826787.html

相关文章

  • 实验三 数组、指针与现代C++标准库
    实验五代码:info.hpp:#pragmaonce#include<iostream>usingnamespacestd;classinfo{public:info(stringni="",stringco="",stringci="",i......
  • C++ std::numeric_limits用法
    转自:https://blog.csdn.net/fengbingchun/article/details/779225581.介绍 std::numeric_limits为模板类,在库编译平台提供基础算术类型的极值等属性信息,需包含<limits>......
  • Dev-C++调试过程
    代码如下:#include<stdio.h>intmain(){inta=5;intb=6;intt;t=a;a=b;b=t;printf("a=%d,b=%d\n",a,b);return0;}步骤如下:1. 新建文件并输入上述代码保......
  • Dev-C++调试过程
    代码如下:#include<stdio.h>intmain(){inta=5;intb=6;intt;t=a;a=b;b=t;printf("a=%d,b=%d\n",a,b);return0;}步骤如下:1. 新建文件并输入上述代码保......
  • C++:运算符重载
    前言  重载我们又称之为多态,重载在编程中的用法非常之多,比如最熟悉的函数重载(基于C++开发的capl语言同样支持函数重载)。当然在C++中仍然支持将多态引用到运算符中,例如*......
  • P7911 网络连接评论及c++题解
    P7911网络连接1.原题链接root2.评论下位黄的水平前置知识:sscanf()函数,sprintf()函数,map<>当然,不会sscanf()和sprintf()也有解法,详见解法13.解法解法1#inclu......
  • 实验3 数组、指针与现代c++标准库
    实验任务5#include"Info.hpp"#include<iostream>#include<string>#include<vector>intmain(){strings1,s2="continue";inti=0,n=0;intcon......
  • C++ 面向对象高级开发 基础篇(二)
    操作符重载C2就是this传递者不用知道是否returnbyreference 非成员函数(全局函数)的操作符重载(有几种用法就写几种重载)不能使用returnbyreference因为他们得......
  • this关键字除了在实例方法中,也可以使用在构造方法中
    //this除了可以使用在实例方法中,还可以使用在构造方法中/*需求:1.定义一个日期类,可以表示年月日信息2.需求中要求:如果调用无参数构造方法,默认创建的......
  • C++ STL库_vector
    1.vector的初始化方式vectora(10);定义10个整形元素的向量(每个元素的初值为0)vectora(10,1);定义10个整形元素的向量(每个元素的初值为1)vectora(b);用b向量创建a向量,整体......