设计不能被继承的类

目录

一、如何设计不能被继承的类

二、代码演示

1、基类构造函数设置为私有

2、用final修饰类

3、final关键字


一、如何设计不能被继承的类

有两种方式

1、对于C++98,可以将构造函数设置为私有

2、对于C++11,用final修饰类

二、代码演示

1、基类构造函数设置为私有

为什么基类构造函数设置为私有就不能被继承?

1、私有的构造函数对子类是不可见的

2、派生类调用构造函数必须先调用父类的构造函数初始化父类的那一部分

复制代码
//1、对于C++98,可以将构造函数设置为私有
class A
{
public:
private:
	A() {}
};

class B : public A
{
public:
};

int main()
{
	B b;//error A不能被B继承
}

//////////////////////////////////////////////
//基类构造函数设置为私有后,可以通过静态成员函数来获取基类对象
class A
{
public:
	static A GetObject()
	{
		return A();
	}
private:
	A() {}
};

class B : public A
{
public:
};

int main()
{
	A::GetObject();
}

2、用final修饰类

3、final关键字

final关键字有两个作用

一个是修饰类,被修饰的类不能被继承

一个是修饰虚函数,虚函数不能被重写

相关推荐
xiaoye-duck3 小时前
《C++ 工具库实战》gflags 命令行参数解析库详解
c++·第三方库
OpenAnolis小助手3 小时前
PHP 两个严重漏洞曝光,龙蜥社区 24 小时完成 3 版本修复
开发语言·操作系统·php·龙蜥社区
狂奔的sherry4 小时前
C++ 宏生成访问函数的代价:访问权限、调试和类型检查
c++·宏·编译·预处理器·类型检查
阿尼卡~4 小时前
VS Code 配置 C 语言开发环境(Windows 10/11):从 GCC 安装到运行、断点调试,一篇搞定
c语言·开发语言·windows
划破黑暗的第一缕曙光5 小时前
[C++]:5.STL:string(2)
java·c++·redis
hhhjhl5 小时前
Undici 跨端三方库仓颉适配全流程
java·开发语言·ubuntu
染指11105 小时前
158.Agent-LangGraph-子图(共享状态和不共享状态模式)
开发语言·人工智能·python·ui·agent·agents
wangchunyu1145 小时前
JAVA JVM内存结构与运行时数据区
java·开发语言·jvm
slongzhang_5 小时前
linux 递归删除源码文件|递归删除目录下 *.js,但排除 *.min.js
linux·开发语言·javascript
云和数据.ChenGuang7 小时前
Python 常见特殊方法详解:__new__、__init__、__del__、__str__、__repr__ 与 __getattribute__
开发语言·人工智能·python·1024程序员节