C++:38---final关键字和禁止类继承

 

一、final关键字

  • C++新标准规定:如果我们定义的类不希望被其他类继承,那么可以在类名后加一个final关键字

  • 但是final类仍然可以继承其他类。

  • 实际上C++11的关键字final有两个用途。第一,它阻止了从类继承;第二,阻止一个虚函数的重载。

二、演示案例

class A final{};
class B:public A{}; //报错,A是final的
class A {};
class B final :public A{}; //正确
class C:public B {}; //错误

  

某些实现系统服务、基础功能和加密等的类通常是不允许有子类的;实现者不想客户端从这些类派生新类而修改他们。标准库容器,如std:: vector和std:: list的无子类化类型就是另一个很好的例子。这些容器没有虚拟析构函数或者确切地说没有任何虚成员函数。

然而,程序员常常在没有意识到风险的情况下坚持从std::vector派生。在C++11中,无子类类型将被声明为如下所示:

class TaskManager {/*..*/} final;class PrioritizedTaskManager: public TaskManager {};  //compilation error: base class TaskManager is final

同样,你可以通过

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/444335.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++:48---纯虚函数

一、纯虚函数 纯虚函数一种特殊的虚函数,在许多情况下在基类中不对虚函数做出有意义的实现,而是把它定义为纯虚函数,它的实现由派生类实现格式:virtual 返回类型 函数名(参数列表)=0;注意事项 纯虚函数不能实现,没有函数体,其实现由子类去实现各自的功能版本纯虚函数可以…

leetcode389. 找不同

给定两个字符串 s 和 t,它们只包含小写字母。 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。 请找出在 t 中被添加的字母。 示例: 输入: s "abcd" t "abcde" 输出: e 解释: …

C++:47---绝不重新定义继承而来的缺省参数值

一、静态类型、动态类型 静态类型:在被声明时所采用的的类型动态类型:目前所知对象的类型演示案例 下面是一个继承体系class Shape {public:enum ShapeColor { Red, Green, Blue };virtual void draw(ShapeColor color = Red)const = 0;};class Rectangle :public Shape {pub…

C++:44---关键字virtual、override、final

一、虚函数 概念:在函数前面加virtual,就是虚函数虚函数的一些概念: 只有成员函数才可定义为虚函数,友元/全局/static/构造函数都不可以虚函数需要在函数名前加上关键字virtual成员函数如果不是虚函数,其解析过程发生在编译时而非运行时派生类可以不覆盖(重写)它继承的虚…

leetcode409. 最长回文串

给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。 在构造过程中,请注意区分大小写。比如 "Aa" 不能当做一个回文字符串。 注意: 假设字符串的长度不会超过 1010。 示例 1: 输入: "abccccdd" 输…

C++:46---绝不重新定义继承而来的non-virtual函数

一、看一个隐藏non-virtual函数的例子 假设class D以public的方式继承于class B,代码如下:class B {public:void mf();};class D :public B {};int main(){D x;B *pB = &x;pB->mf(); //调用B::mf()D *pD = &x;pD->mf(); //调用D::mf()return 0;}二、静态绑…

C++:45---多态

一、多态介绍 面向对象的核心思想是多态性,其含义是“多种形式”概念:在子类覆盖了父类函数的情况下,用父类的指针(或引用)调用子类对象,或者通过父类指针调用覆盖函数的时候(动态绑定),实际上调用的是子类的覆盖版本,这种现象叫做多态注意事项:只有用父类的指针(或引用…

leetcode415. 字符串相加

给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。 注意: num1 和num2 的长度都小于 5100. num1 和num2 都只包含数字 0-9. num1 和num2 都不包含任何前导零。 你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为…

C++:53---菱形继承、虚继承

一、菱形继承 在介绍虚继承之前介绍一下菱形继承概念:A作为基类,B和C都继承与A。最后一个类D又继承于B和C,这样形式的继承称为菱形继承菱形继承的缺点:数据冗余:在D中会保存两份A的内容访问不明确(二义性):因为D不知道是以B为中介去访问A还是以C为中介去访问A,因此在访…

C++:49---继承中的友元

一、友元在继承中的关系我们在友元的文章中介绍过,友元关系不能继承。(1)友元关系不存在传递性,即每个类负责控制自己的友元类或者友元函数;(2)友元关系是单向的,不具有交换性。若类…

leetcode383. 赎金信

给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串ransom能不能由第二个字符串magazines里面的字符构成。如果可以构成,返回 true ;否则返回 false。 (题目说明:为了不暴露赎金信字迹,要从…

C++:52---多重继承

一、多重继承概念 多重继承是指:从多个直接基类而产生派生类的能力例如:class ZooAnimal {}; //动物class Endangered {}; //濒临灭绝的动物class Bear :public ZooAnimal {}; //熊 //多重继承 class Panda :public Bear, public Endangered {}; //熊猫二、多重继承的语法 继…

关于jsp页面显示的时间格式和Oracle数据库中的格式不一样的问题

今天我遇到一个问题:就是数据库存的时间格式是:2013-06-28 11-00-17 ,但是通过查询在jsp页面上显示出来是:2013-06-28 11-00-17.0 就是多了一个.0,之后通过查资料解决了这个问题,现在写出来和大家分享一下…

C++:50---虚析构函数

一、引入 如果通过一个基类指针申请一个派生类对象,那么在通过这个指针释放对象的时候,要求基类的虚函数是virtual的 。二、虚析构函数 使用方法和规则与虚函数一样格式要求:虚析构函数要求基类与派生类中的名称不一致只要基类的析构函数是虚函数,就能确保我们在释放指针时…

C++:51---继承中的构造函数、析构函数、拷贝控制一系列规则

一、继承中的构造函数 根据构造函数的执行流程我们知道:派生类定义时,先执行基类的构造函数,再执行派生类的构造函数拷贝构造函数与上面是相同的原理二、继承中的析构函数 根据析构函数的执行流程我们知道:派生类释放时,先执行派生类的析构函数,再执行基类的析构函数二、…

leetcode434. 字符串中的单词数

统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符。 请注意,你可以假定字符串里不包括任何不可打印的字符。 示例: 输入: "Hello, my name is John" 输出: 5 思路:本位是字母,前面是空格(或…

Redis:15---键迁移(move、dump、restore、migrate)

键迁移概述:键迁移就是把数据由一个Redis迁移到另一个Redis(例如从生产环境迁移到测试环境),或者在数据库之间进行迁移键迁移有三种方式:move、dumprestore、migrate下面是三种方式的比较,建议使用migrate&…

Redis:18---常用功能之(Lua脚本)

为了保证多条命令组合的原子性,Redis提供了简单的事务功能以及集成Lua脚本来解决这个问题,本文介绍Lua,事务已经在前一篇文章介绍过了一、Lua概述 Lua语言是在1993年由巴西一个大学研究小组发明,其设计目标是作为嵌入式程序移植到其他应用程序,它是由C语言实现的,虽然简单…

leetcode414. 第三大的数

给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。 示例 1: 输入: [3, 2, 1] 输出: 1 解释: 第三大的数是 1. 示例 2: 输入: [1, 2] 输出: 2 解释: 第三大的数不存在, 所以返回最大的数…

Redis:17---常用功能之(事务)

为了保证多条命令组合的原子性,Redis提供了简单的事务功能以及集成Lua脚本来解决这个问题,本文介绍Redis事务,Lua在下一篇文章介绍一、事务概述简单地说,事务表示一组动作,要么全部执行,要么全部不执行。例…