C++ final用法简介

这篇具有很好参考价值的文章主要介绍了C++ final用法简介。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1: final作用于类名之后,表示这个类不能被继承,

如下代码:

#include <iostream>
using namespace std;
class A13 {
public:
	A13() {
		cout << "default constructor" << endl;
	}
	int say()  {
		cout << "say" << endl;
		return  0;
	}
};

class B: public A13 {
};

int main() {
	B *b = new B();
	b->say();
	delete  b;
	return 0;
}

B 继承A ,编译以及运行都正常。
如果我们现在把第三行由:

 class A13 {

修改为

class A13 final {

编译错误如下:

cpp13.cpp:15:7: error: cannot derive from ‘final’ base ‘A13’ in derived type ‘B’
   15 | class B: public A13 {
      |       ^

由于 class A13 之后有加 final ,表明这个类不能被继承,所以编译报错。

最终全部代码如下:

#include <iostream>
using namespace std;
class A13 final {
public:
	A13() {
		cout << "default constructor" << endl;
	}
	int say()  {
		cout << "say" << endl;
		return  0;
	}
};

class B: public A13 {
};

int main() {
	B *b = new B();
	b->say();
	delete  b;
	return 0;
}

2:final作用于一个类的虚函数之后,表示这个方法不能被子类重写:

如下代码B14继承A14,编译运行都正常,

#include <iostream>
using namespace std;

class A14 {
public:
	A14() {
		cout << "default constructor A14" << endl;
	}
	virtual int say()   {
		cout << "A say" << endl;
		return  0;
	}
};


class B14: public A14 {
public:
	 int say()   {
			cout << "B say" << endl;
			return  0;
		}

};

int main() {
	B14 *b = new B14();
	b->say();
	delete  b;
	return 0;
}

如果我们将虚函数

virtual int say() 

后面加 final:

virtual int say() final  {

则编译错误如下:

cpp14.cpp:18:14: error: virtual function ‘virtual int B14::say()’ overriding final function
   18 |          int say()   {
      |              ^~~
cpp14.cpp:9:21: note: overridden function is ‘virtual int A14::say()9 |         virtual int say() final  {
      |                     ^~~

表明虚函数加final 之后不能被覆盖重写。

最终的完整代码如下:

#include <iostream>
using namespace std;

class A14 {
public:
	A14() {
		cout << "default constructor A14" << endl;
	}
	virtual int say() final  {
		cout << "A say" << endl;
		return  0;
	}
};


class B14: public A14 {
public:
	 int say()   {
			cout << "B say" << endl;
			return  0;
		}

};

int main() {
	B14 *b = new B14();
	b->say();
	delete  b;
	return 0;
}

当然一个非虚函数加final 也编译报错,final用在函数上的时候,只能用在虚函数上。文章来源地址https://www.toymoban.com/news/detail-536484.html

到了这里,关于C++ final用法简介的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • c++ vector用法 入门必看 超详细

    vector是最常用的容器之一,功能十分强大,可以储存、管理各种类型的数据。在很多情况下可以用来代替功能比较局限的普通数组,因为我们知道,普通数组只能实现一对一的映射而不能实现一对多的映射,vector就是专门为了解决这个问题而诞生的。vector也可以称为动态数组

    2024年02月01日
    浏览(42)
  • 【C++入门到精通】智能指针 auto_ptr、unique_ptr简介及C++模拟实现 [ C++入门 ]

    在 C++ 中,智能指针是一种非常重要的概念,它能够帮助我们自动管理动态分配的内存,避免出现内存泄漏等问题。在上一篇文章中,我们了解了智能指针的基本概念和原理, 本篇文章将继续介绍 auto_ptr 和 unique_ptr 两种智能指针的概念及其在 C++ 中的模拟实现 。通过学习这些

    2024年01月19日
    浏览(53)
  • C++(Qt)软件调试---gdb调试入门用法(12)

    更多精彩内容 👉个人内容分类汇总 👈 👉C++软件调试、异常定位 👈 👉GDB官方教程文档(英文) 👈 👉100个gdb小技巧 👈 1.1 什么是GDB GDB是GNU调试器的缩写,是一种用于调试程序的工具。 它可以帮助程序员在程序运行时检查程序的状态,查找程序中的错误和问题,并提供

    2024年02月12日
    浏览(28)
  • C++中stack的用法(超详细,入门必看)

    博主简介: Hello大家好呀,我是陈童学,一个与你一样正在慢慢前行的人。 博主主页: @陈童学哦 所属专栏: C++STL 前言: Hello各位小伙伴们好!欢迎来到 本专栏C++STL 的学习,本专栏旨在帮助大家了解并熟悉使用C++中的STL,C++中的STL(标准模板库)是相当好用的,🍉🍉🍉

    2024年02月06日
    浏览(32)
  • C++中queue的用法(超详细,入门必看)

    博主简介: Hello大家好呀,我是陈童学,一个与你一样正在慢慢前行的人。 博主主页: @陈童学哦 所属专栏: C++STL 前言: Hello各位小伙伴们好!欢迎来到 本专栏C++STL 的学习,本专栏旨在帮助大家了解并熟悉使用C++中的STL,C++中的STL(标准模板库)是相当好用的,🍉🍉🍉

    2024年02月10日
    浏览(46)
  • C++中deque的用法(超详细,入门必看)

    博主简介: Hello大家好呀,我是陈童学,一个与你一样正在慢慢前行的人。 博主主页: @陈童学哦 所属专栏: C++STL 如果本文对你有所帮助的话,希望可以点赞👍收藏📂支持一下哦! 期待你的关注,一起成长哟! 前言: Hello各位小伙伴们好!欢迎来到 本专栏C++STL 的学习,

    2024年02月07日
    浏览(26)
  • 【C++入门】学习使用二维数组基本知识及用法详解

    🧛‍♂️iecne个人主页: : iecne的学习日志 💡每天 关注 iecne的作品,一起进步 💪一起学习,必看iecne 🐳希望大家多多支持🥰一起进步呀! 二维数组就是在一维数组上多加一个维度。 建议:以下三种定义方式,利用第二种更加直观,提高代码可读性 第二种就是在定义一

    2024年01月25日
    浏览(41)
  • c++ priority_queue用法 入门必看 超详细

    priority_queue即优先级队列,它的使用场景很多,它底层是用大小根堆实现的,可以用log(n)的时间动态地维护数据的有序性。适用于许多场景,比如简化哈夫曼树算法、dijkstra算法等等 priority_queue是不允许随机访问,只能访问队列首部的元素,也只能对首部元素进行出队,下面进

    2024年02月12日
    浏览(26)
  • C++图形开发(1):graphics图形库简介与安装

    为了帮助大家实现真正的、更有意思的C++开发,本人决定开一个C++图形开发的专栏,来制作更多的有意思的游戏、程序。 首先我们要了解的,就是控制台和图形库之间的区别: 控制台是一种基于字符的显示方式,它使用文本字符来组成屏幕上的图像。它通常用于命令行界面

    2024年02月12日
    浏览(45)
  • 【C++入门系列】——命名空间和输入输出

    📚lovewold少个r博客主页     ⚠️ 本文重点 : c++入门第一个程序和基本知识讲解 😄 每日一言 :忙,不会死,人只有越忙越活,流水不腐,户枢不蠹。 ​作者主页 前言 谈谈我个人对语言和职业的看法 C++的历史发展 C++第一个程序 命名空间 定义命名空间 使用此命名空间 命

    2024年02月05日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包