特殊类的设计

前言: 

        在C++中有很多关于类的知识,学习并且掌握它们是我们学习C++的重要的一步,怎么检测自己掌握了这些知识呢?请看看尝试解决下面这些问题。

目录

1.请设计一个类不能被拷贝

2.请设计一个类,只能在堆上创建对象

3.请设计一个类,只能在栈上创建空间  

4.请设计一个类,不能被继承

5.请设计一个类,只能创建一个对象(单例模式)


1.请设计一个类不能被拷贝

        拷贝只会发生在两个场景下,赋值和拷贝构造,因此想要一个类禁止拷贝,只需要让这个类不能调用拷贝构造和赋值运算符重载即可。 

        在C++98中:会采取拷贝构造函数,和operator=函数私有化的方法来解决这个问题。

         

using namespace std;
class CopyBan
{
public:CopyBan(int a = 0):_a(a){ }//...其它实现private:CopyBan(const CopyBan&);CopyBan& operator=(const CopyBan&){}int _a = 0;
};
int main()
{CopyBan cp;//拷贝和赋值都会报错CopyBan cp1(cp);CopyBan cp2;cp2 = cp;return 0;
}

        在C++11中采用关键字delete。 

        

class CopyBan
{
public:CopyBan(int a = 0):_a(a){ }//...其它实现//C++11采用delete关键字CopyBan(const CopyBan&) = delete;CopyBan& operator=(const CopyBan&) = delete;private:int _a = 0;
};

2.请设计一个类,只能在堆上创建对象

        实现方式:

        1.将类的构造函数和拷贝构造函数私有化,防止别人调用它们在其它地方偷偷开辟空间。         

        2.提供一个静态的成员函数,该静态成员函数完成对象在堆上开辟空间的任务。

class HeapOnly
{
public:static HeapOnly* CreateObject(){return new HeapOnly;}HeapOnly(const HeapOnly&) = delete;HeapOnly& operator=(const HeapOnly&) = delete;
private:HeapOnly(int a = 10):_a(a){ }//int _a;int _a;
};

3.请设计一个类,只能在栈上创建空间  

        思路:禁用掉拷贝构造,让构造函数私有化,使用静态方法创建对象返回即可。

class StackOnly
{
public:static StackOnly CreateObject(int a = 0){return StackOnly();}
private:StackOnly(int a = 0):_a(a){}int _a;
};

        如果只是将operator new定义为已删除函数,不能解决这个问题,因为除了在堆上开辟空间以外,在静态区也是可以开辟对象的。 

4.请设计一个类,不能被继承

        C++98的做法,构造函数私有化。

class NonInherit
{//子类继承父类要调用父类的构造函数,如果将构造函数声明为私有,则子类无法调用
public:
private:NonInherit(int a = 0):_a(a){ }int _a;
};

        C++11的做法,采用关键字finial ,final修饰类表示这个类不能被继承

class NonInherit
{public:NonInherit(int a = 0):_a(a){ }
private:int _a;
};

5.请设计一个类,只能创建一个对象(单例模式)

        单例模式 

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

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

相关文章

HJ23 删除字符串中出现次数最少的字符

描述 实现删除字符串中出现次数最少的字符,若出现次数最少的字符有多个,则把出现次数最少的字符都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。 数据范围:输入的字符串长度满足 1≤n≤20 ,保…

题目:2725.间隔取消

​​题目来源: leetcode题目,网址:2725. 间隔取消 - 力扣(LeetCode) 解题思路: 利用 setInterval()每隔一段时间执行,利用闭包获取停止时间。 解题代码: …

vue使用wangEditor

vue版本2.0;editor5.1.23版本;editor-for-vue:1.0.2版本 api文档入口 效果图 点击查看如何封装 安装步骤入口 npm install wangeditor/editor --savenpm install wangeditor/editor-for-vue --save代码(未封装过的)…

Layui快速入门之第三节栅格布局

目录 一:栅格布局的基本概念 二:栅格布局规则 三:始终等比例水平排列案例 四:响应式规则 五:移动设备、桌面端的组合响应式展现案例 六:移动设备、平板、桌面端的复杂组合响应式展现案例 七&#xf…

day35 线程

程序:是为了完成特定的任务,用某种语言编写的一组有序指令的集合,是一段静态的代码 进程:是程序的一次执行过程 线程:线程是进程中的一个执行单元 线程是调度和执行的单位 处理器和线程间的关系 创建线程(重点) 创建…

DB2和mysql活动日志满了会自动回滚最早未提交的事务吗?

如下场景:一个事务1插入了或者更新了少量的数据但是一直没有提交,活动日志使用率慢慢的增长到90%甚至99%,最后一个事务N正好把活动日志用满,这个时候数据库会怎么处理?将事务1回滚掉,活动日志使用率立即降下…

大数据课程L5——网站流量项目的实时业务系统搭建

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 掌握网站流量项目的 Flume—>Kafka 连通; ⚪ 掌握网站流量项目的实时业务系统搭建; 一、Flume—>Kafka 连通 1. 实现步骤 1. 启动三台服务器。 2. 启动 Zookeeper 集群。 执行指…

2023国赛 B题论文 基于多波束测深技术的海洋探测建模与分析

因为一些不可抗力,下面仅展示小部分论文,其余看文末 一、问题重述 1.1 问题背景 海洋测深是测定水体深度与海底地形的重要任务,有两种主要技术:单波束测深与多波束测深。单波束适用于简单任务,但多波束可提供更精确…

【2023高教社杯】B题 多波束测线问题 问题分析、数学模型及参考文献

【2023高教社杯】B题 多波束测线问题 问题分析、数学模型及参考文献 1 题目 1.1 问题背景 多波束测深系统是利用声波在水中的传播特性来测量水体深度的技术,是在单波束测深的基础上发展起来的,该系统在与航迹垂直的平面内一次能发射出数十个乃至上百个…

【C刷题】day1

一、选择题 1.正确的输出结果是 int x5,y7; void swap() { int z; zx; xy; yz; } int main() { int x3,y8; swap(); printf("%d,%d\n",x, y); return 0; } 【答案】: 3,8 【解析】: 考点: &#xff…

Linux DirtyPipe权限提升漏洞 CVE-2022-0847

Linux DirtyPipe权限提升漏洞 CVE-2022-0847 漏洞描述 CVE-2022-0847-DirtyPipe-Exploit CVE-2022-0847 是存在于 Linux内核 5.8 及之后版本中的本地提权漏洞。攻击者通过利用此漏洞,可覆盖重写任意可读文件中的数据,从而可将普通权限的用户提升到特权…

(其他) 剑指 Offer 67. 把字符串转换成整数 ——【Leetcode每日一题】

❓ 剑指 Offer 67. 把字符串转换成整数 难度:中等 写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为…

Mybatis复杂查询及动态SQL

文章目录 一. 较复杂的查询操作1. 参数占位符#{}和${}2. SQL注入3. like查询4. resultType与resultMap5. 多表查询5.1. 一对一表映射5.2. 一对多表映射 二. 动态SQL1. if标签2. trim标签3. where标签4. set标签5. foreach标签 本篇中使用的数据表即基础映射类都是基于上一篇博客…

【C++进阶】多态

👦个人主页:Weraphael ✍🏻作者简介:目前学习C和算法 ✈️专栏:C航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞&#x1…

Linux相关用法(时刻更新)

杂指令 用法 ssh root(用户名)(云服务器公网ip)adduser Shensk(用户名)passwd Shensk(用户名)userdel -r Shensk(用户名)whoamipwdls,cd,mkdir,touch,rmdir,rm指令 用法 ls [-a,-l,-d] 路径cd 路径(-,~,..,/) *目录mkdir [-p] 路径 *目录 touch 路径 …

Unity实现2D游戏跟随摄像机(平滑移动)

文章目录 玩家角色脚本字段跟随逻辑 完整代码其他相关文章连接 玩家角色 首先创建一个可用的玩家角色,写好移动逻辑,如果要使用在Unity商店中购买的资源,可以点击Window菜单栏> Package Manager选项,来打开Package Manager窗口…

python基础语法(一)

目录 常量和表达式变量和类型变量是什么变量的语法定义变量使用变量 变量的类型整形浮点数(小数)字符串布尔其他 变量为什么会有这么多类型动态类型特征 常量和表达式 python中有许多和C语言相同的知识,但是也有一些不同的知识,比如: print(1 2 - 3)打印12-3的结果 print(1 …

应急响应-Windows挖矿实战

0x00 主机表现 windows主机cpu拉满,主机卡顿,初步判断为中了挖矿病毒 0x00 处置 通过cpu拉满状态,定位初步的进程文件, 通过进程得到的文件上传沙箱,结果显示为恶意文件, 定位到文件夹, 存…

【C++ Core Guidelines解析】深入理解现代C++的特性和原理

文章目录 👨‍⚖️《C Core Guidelines解析》的主要观点👨‍🏫《C Core Guidelines解析》的主要内容👨‍💻作者介绍 🌸🌸🌸🌷🌷🌷💐&a…

蚂蚁开源编程大模型,提高开发效率

据悉,日前蚂蚁集团首次开源了代码大模型 CodeFuse,而这是蚂蚁自研的代码生成专属大模型,可以根据开发者的输入提供智能建议和实时支持,帮助开发者自动生成代码、自动增加注释、自动生成测试用例、修复和优化代码等kslouitusrtdf。…