本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:C++ 11 – final关键字简要介绍
原文链接:https://www.stubbornhuang.com/932/
发布于:2020年10月12日 17:20:19
修改于:2020年10月31日 16:42:40

如果在基类的虚函数声明中加上了final关键字,则表明后续的派生类不能重写该函数。
1 基类的虚函数上加上final关键字
表明基类后续的派生类不能重写该虚函数。
代码示例:
#include <iostream>
#include <memory>
using namespace std;
class Shape
{
public:
virtual void Area() final
{
std::cout << "Shape Area" << std::endl;
}
};
class Triangle : public Shape
{
public:
// 编译错误
virtual void Area()
{
std::cout << "Triangle Area" << std::endl;
}
};
int main()
{
std::shared_ptr<Triangle> pTriangle = std::make_shared<Triangle>();
pTriangle->Area();
getchar();
return 0;
}
我们在基类Shape中普通虚函数Area中增加了final关键字,又在派生类Triangle中增加了Area的实现,此时编译器会报错。
2 派生类的虚函数加上关键字final
在派生类的虚函数加上关键final说明该派生类后续的派生类不能重写该函数!
#include <iostream>
#include <memory>
using namespace std;
class Shape
{
public:
virtual void Area()
{
std::cout << "Shape Area" << std::endl;
}
};
class Triangle : public Shape
{
public:
virtual void Area() final;
};
class MyTriangle : public Triangle
{
public:
// 编译错误
virtual void Area()
{
std::cout << "Triangle Area" << std::endl;
}
};
int main()
{
std::shared_ptr<Triangle> pTriangle = std::make_shared<Triangle>();
pTriangle->Area();
getchar();
return 0;
}
3 派生类的虚函数同时加上关键字override和final
在派生类类的虚函数加上关键字override和final,说明派生类后续的派生类不能重写该函数,但是当前派生类可以重写当前基类的虚函数!
#include <iostream>
#include <memory>
using namespace std;
class Shape
{
public:
virtual void Area()
{
std::cout << "Shape Area" << std::endl;
}
};
class Triangle : public Shape
{
public:
// 正确
virtual void Area() override final
{
std::cout << "Triangle Area" << std::endl;
}
};
class MyTriangle : public Triangle
{
public:
// 编译错误
virtual void Area() override
{
std::cout << "Triangle Area" << std::endl;
}
};
int main()
{
std::shared_ptr<Triangle> pTriangle = std::make_shared<Triangle>();
pTriangle->Area();
getchar();
return 0;
}
当前分类随机文章推荐
- C++ – 字节数组byte[]或者unsigned char[]与long double的相互转换 阅读317次,点赞0次
- C++ 11 - final关键字简要介绍 阅读1362次,点赞0次
- C++ – UTF8编码下的全角字符转半角字符 阅读614次,点赞0次
- C++11/std::shared_ptr - 循环引用问题 阅读2899次,点赞0次
- C++ - 只有在Debug模式下才使用std::cout输出调试日志,Release发布版本不输出调试日志 阅读2796次,点赞0次
- Centos7 编译C++项目错误解决 : terminate called after throwing an instance of 'std::regex_error' 阅读1795次,点赞0次
- C++ - 控制台程序在控制台窗口可变参数格式化带颜色输出日志信息 阅读2234次,点赞0次
- C++STL容器 - std::map查找元素与判断键值是否存在方法总结 count,find,contains,equal_range,lower_bound,upper_bound 阅读317次,点赞0次
- C++ - 阿拉伯数字字符串转换为中文读法的中文字符串,支持小数点 阅读555次,点赞0次
- C++ Map中存储动态指针时正确释放内存 阅读2724次,点赞0次
全站随机文章推荐
- FFmpeg - 将某个文件夹下的图片按标号顺序合成为指定编码格式和指定帧率的视频 阅读2562次,点赞0次
- Python - 配置Yolov5出现ImportError: cannot import name 'PILLOW_VERSION' from 'PIL'错误 阅读406次,点赞0次
- 资源分享 - Graphics Programming Methods 英文高清PDF下载 阅读1179次,点赞0次
- Mediapipe - 关于对Mediapipe C++ SDK使用不当造成的内存泄漏和内存溢出问题的记录 阅读294次,点赞2次
- Duilib - 设置窗体阴影 阅读1918次,点赞1次
- C++ - 字节数组byte[]或者unsigned char[]与int的相互转换 阅读3656次,点赞1次
- 资源分享 - 计算机图形学,Fundamentals of Computer Graphics(Second Edition) 中文版PDF下载 阅读818次,点赞0次
- 资源分享 - Vector Analysis for Computer Graphics , Second Edition 英文高清PDF下载 阅读379次,点赞0次
- C++11 - 解析并获取可变参数模板中的所有参数 阅读543次,点赞0次
- 工具软件推荐 - 几个阅读英文文献的免费中文翻译科研利器推荐 阅读555次,点赞1次
评论
147