首页 > 编程语言 >【C++-笔记】override与final说明符

【C++-笔记】override与final说明符

时间:2022-08-28 16:01:46浏览次数:69  
标签:函数 C++ 说明符 基类 override final

在effective C++中提到C++没有Java那样的final classes的禁止派生的机制,遂想到在C++ Primer中好像提到过final说明符,正好就连带着override说明符一起复习一下了。

简介

首先介绍一下在继承当中,如果派生类定义了一个与基类中虚函数同名但是形参列表不同的函数,编译器会认为这是合法的行为,这两个函数是独立的两个函数,这时派生类的函数并没有覆盖掉基类中的版本。但是可能存在这样一种问题:我们本来希望是对于基类函数的重载,但是不小心弄错了形参列表。这个时候就体现了override说明符的作用了。

override说明符

如果使用了override说明符,则表明我们希望这个函数可以覆盖基类中的同名虚函数,因此如果出现了形参列表不同的问题,编译器就会报错。
另外需要注意的是,只有虚函数才可以被覆盖,如果在子类中对基类中的非虚函数使用override同样也会报错。

final说明符

与override说明符相对,如果我们将类中的某个成员函数指定为final,则之后任何试图覆盖该函数的行为都将引发错误。对于final说明符的使用则不限定于虚函数,也就是说如果在基类中使用了final说明符,是不允许派生类中声明同一个函数的

总结

确实可以看到C++中虽然有final说明符,但是并不是用于防止派生类的产生,而是用于单个成员函数的覆盖问题。
另外,如果我们不希望非虚析构函数被继承,可以将其声明为final。但是这个和使用继承的初衷相悖,我们在设计一个类的时候就应当考虑到这个类是否会被继承,因此在设计之初就应该考虑这个析构函数是否应当设计成虚函数。

标签:函数,C++,说明符,基类,override,final
From: https://www.cnblogs.com/wuyawine/p/16632924.html

相关文章

  • C++ 用函数打印员工的平均工资
    #include<iostream>#include<windows.h>#include<string>usingnamespacestd;floataverageSalary(intn[],inti){floatsum=0;for(intx=0;x......
  • 线段树 C++实现 树形式
    网上看了一圈,看到几个都是用数组实现的我用树结构重写了一遍#ifndefSEGMENTTREE_H#defineSEGMENTTREE_H#include<vector>template<typenameT>classSegmentTree......
  • c++ :虚拟机centos7+vscode
    c++:虚拟机centos7+vscodegcc、g++、make查看是否安装成功$gcc--version$g++--version$make--version哪个没有,就yuminstallgcc-c++/yuminstallgcc/yum......
  • c++ delegate 类,最大16个参数,用程序生成的代码
    2017-02-1604:58:34 发布于 CSDN 现转博客园。 读这篇文章的前提是,我们使用的编辑器对c++11的支持不太友好。下面是测试代码:#include<stdio.h>#include<stdlib......
  • C++函数名称作为参数
    1#ifndefCHANPROJECT_VECTOR2D_H2#defineCHANPROJECT_VECTOR2D_H3#include"ChanGlobal.h"45namespaceCommon{6template<typenameT>7cl......
  • UE4 C++学习 浅析基本数据类型
    本文只解析一些UE4特有的一些数据类型,一些常用的类型如布尔(Bool),整型(Int)等不再赘述。 UE4的基本数据类型有以下几种:   命名(FName):在C++中,命名被写成FName使用......
  • c++ bind ref 例子
    //bindexample#include<iostream>//std::cout#include<functional>//std::bind//afunction:(alsoworkswithfunctionobject:std::divides<doubl......
  • C++ 之函数模板
    C++之函数模板函数的参数类型不确定,这样就可以使用泛型。//类型参数化C++中称之为泛型编程--模板技术template<classT>//告诉编译器,下面如果出现T不要报错,T是......
  • 《机器人SLAM导航核心技术与实战》第1季:第2章_C++编程范式
    《机器人SLAM导航核心技术与实战》第1季:第2章_C++编程范式视频讲解【第1季】2.第2章_C++编程范式-视频讲解【第1季】2.1.第2章_C++编程范式-C++工程的组织结构-视频......
  • 【C++】实现D3D9 的 Inline hook
    【C++】实现D3D9的Inlinehook 简单介绍一下HOOK原理:函数调用的过程大致是先push参数进去,再执行call函数地址,进入函数。此时将所调用的函数的前五个字......