c++11 继承控制:final和override
c++11 继承控制:final和override
#define _CRT_SECURE_NO_WARNINGS #include <iostream>
#include <string>
#include <vector>
#include <map> // C++11之前,一直没有继承控制关键字,禁用一个类的进一步衍生比较麻烦。
/*
C++ 11添加了两个继承控制关键字:final和override。
final阻止类的进一步派生和虚函数的进一步重写
override确保在派生类中声明的函数跟基类的虚函数有相同的签名 在C++中,只要原来的返回类型是指向类的指针或引用,新的返回类型是指向派生类的指针或引用,覆盖的方法就可以改变返回类型。这样的类型称为协变返回类型(Covariant returns type).
返回类型的协变(covariance)指返回类型是接口或委托定义返回类型的子类,
参数类型的逆变(contravariance)是指实现的参数类型是接口或委托定义的参数类型的父类。
*/
class B1 final {}; // 此类不能被继承
//class D1: public B1 {}; // error! class B
{
public:
// virtual void func() override // error! 指定了重写但实际并没重写,没有基类
// {
// std::cout << __func__ << std::endl;
// }
virtual void f() const
{
std::cout << __func__ << std::endl;
}
virtual void fun()
{
std::cout << __func__ << std::endl;
}
}; class D : public B
{
public:
virtual void f(int) // ok! 隐藏,由于没有重写同名函数B::f,在D中变为不可见
{
std::cout << "hiding: " <<__func__ << std::endl;
}
// virtual void f() override // error! 指定了重写但实际并没重写,类型声明不完全相同
// {
// std::cout << __func__ << std::endl;
// }
virtual void fun() override final // ok! 指定了重写实际上也重写了,同时,指定为最终,后代类中不能再重写此虚函数
{
std::cout << __func__ << std::endl;
}
}; class D2 : public D
{
public:
virtual void f() const // ok! 重写B::f(),同时,由于没有重写D::f(int),在D2中变不可见
{
std::cout << __func__ << std::endl;
}
// virtual void fun() // error! 基类的此虚函数被指定为最终,不能被重写,虽然没有显示指定"override"
// {
// std::cout << __func__ << std::endl;
// }
// virtual void fun() override // error! 基类的此虚函数被指定为最终,不能被重写
// {
// std::cout << __func__ << std::endl;
// }
}; void mytest()
{ return;
} int main()
{
mytest(); system("pause");
return ;
}
c++11 继承控制:final和override的更多相关文章
- C++ 11 Lambda表达式、auto、function、bind、final、override
接触了cocos2dx 3.0,就必须得看C++ 11了.有分享过帖子:[转帖]漫话C++0x(四) —- function, bind和lambda.其实最后的Lambda没太怎么看懂. 看不懂没关 ...
- C++11: final与override
C++11中增加了final与override关键字,貌似是从Java语言中借鉴而来,用途也一样.看例子代码: 01.#include <iostream> 02. 03.using n ...
- c++11 继承构造
c++11 继承构造 #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> #includ ...
- 008单例、继承、final
内容:单例,类继承,final #################################################################################### ...
- “全栈2019”Java第五十一章:继承与final关键字详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- Java(Android)编程思想笔记02:组合与继承、final、策略设计模式与适配器模式、内部类、序列化控制(注意事项)
1.组合和继承之间的选择 组合和继承都允许在新的类中放置子对象,组合是显式的这样做,而继承则是隐式的做. 组合技术通常用于想在新类中使用现有类的功能而非它的接口这种情形.即在新类中嵌入某个对象,让其实 ...
- final ,override关键字
final 有时我们会定义这样一种类,我们不希望其他类继承它,或者不想考虑它是否适合作为一个基类.为了实现这一目的,c++ 11新标准提供了一种防止继承发生的方法,即在类名后跟一个关键字final: ...
- 公有/私有/保护继承、overload/overwrite/override之间的区别
一.继承 C++很重要的一个特征就是代码重用.在C语言中重用代码的方式就是拷贝代码.修改代码.C++可以用继承或组合的方式来重用.通过组合或继承现有的的类来创建新类,而不是重新创建它们. 继承是使用已 ...
- 从零开始学C++之继承(一):公有/私有/保护继承、overload/overwrite/override之间的区别
一.继承 C++很重要的一个特征就是代码重用.在C语言中重用代码的方式就是拷贝代码.修改代码.C++可以用继承或组合的方式来重用.通过组合或继承现有的的类来创建新类,而不是重新创建它们. 继承是使用已 ...
随机推荐
- SICP读书笔记 2.4
SICP CONCLUSION 让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 ! 祝我能够突破层层代码,找到住在里计算机的神灵! 目录 1. 构造过程抽象 2. 构造数据抽象 ...
- vue mock(模拟后台数据) 最简单实例(一)——适合小白
开发是前后端分离,不需要等待后台开发.前端自己模拟数据,经本人测试成功. 我们在根目录新建存放数据的json文件,存放我们的数据data.json //data.json{ "status& ...
- GlusterFS分布式存储集群-1. 部署
参考文档: Quick Start Guide:http://gluster.readthedocs.io/en/latest/Quick-Start-Guide/Quickstart/ Instal ...
- 高可用OpenStack(Queen版)集群-16.Nova集成Ceph
参考文档: Install-guide:https://docs.openstack.org/install-guide/ OpenStack High Availability Guide:http ...
- Python处理PDF和Word文档常用的方法
Python处理PDF和Word文档的模块是PyPDF2,使用之前需要先导入. 打开一个PDF文档的操作顺序是:用open()函数打开文件并用一个变量来接收,然后把变量给传递给PdfFileReade ...
- (一)Hyperledger Fabric 1.1安装部署-基础环境搭建
在学习和开发hyperledger fabric的时候遇到了一些坑,现将自己的一些总结和心得整理如下,以期对大家有所帮助.本次使用的宿主机环境:ubuntu,版本:Ubuntu 16.04.3 LTS ...
- CentOS 7 Docker基本特性
Docker是一个开源的应用容器引擎,开发人员可以非常容易地打包已经开发好的应用,同时将应用相关的依赖包也打包到这样一个可移植的容器中,然后发布到任意的Linux主机系统上.Docker是基于Linu ...
- 8.openldap mirrormode(主主同步)
作者:yaoyao #MirrorMode双主模式 1.主机: ldap01.liuyao.com ldap02.liuyao.com 2.搭建LDAP服务 搭建过程省略,保证2台服务器部署配置一样即 ...
- bing词典vs有道词典对比测试报告——功能篇之细节与用户体验
之所以将细节与用户体验放在一起讨论,是因为两者是那么的密不可分.所谓“细节决定成败”,在细节上让用户感受方便.舒适.不费心而且温馨,多一些人文理念,多一些情怀,做出来的产品自然比其他呆板的产品更受欢迎 ...
- android学习-2 (AVD 创建)
在Android studio的tools下选择AVD manager 按照指示选择相应的硬件和系统映像. 在模拟器中运行应用 选择RUN APP 选择RUN时,并不只运行应用,还会处理运行应用所需要 ...