特殊类设计

2023-12-16

1.请设计一个类,不能被拷贝
拷贝只会放生在两个场景中: 拷贝构造函数 赋值运算符重载
c++98
将拷贝构造函数与赋值运算符重载 只声明不定义 并且将其访问权限设置为私有 即可

class Copyban{
  Copyban(const Copyban&);
  Copyban operator=(const Copyban&);
 }

①.设置成私有:如果只声明没有设置成private,用户自己在类外定义了,就可以不能禁止拷贝了
②.只声明不定义:不定义是因为该函数根本不会调用吗,定义了没意义,而且如果定义了就不会防止成员函数内部拷贝了
C++1
C++11扩展delete的用法,delete除了释放new申请的资源外,如果在默认成员函数后跟上=delete,表示让编译器删除掉该默认成员函数。

class CopyBan
{
    CopyBan(const CopyBan&)=delete;
    CopyBan& operator=(const CopyBan&)=delete;
};

2.设计一个类,只能在堆上创建对象
方案一:析构函数私有化

class Heaponly{
static void Destroy(Heaponly*ptr){
     delete ptr;
}
void Destroy{
   delete this;
}
private:
~Heaponly(){
}
}
int main(){
    Heaponly*ptr=new Heaponly;
    Heaponly::destroy(ptr);
 //  ptr->destroy();
 }

我们可以将析构函数私有化,因为在栈上和静态区的对象需要自动调用析构函数,而析构函数无法显示调用了,就会导致我们无法在栈上和静态区创建对象。
因为堆上的对象是需要我们手动的创建和删除的,所以在堆上创建对象只先调用构造函数; 如果我们需要对堆上创建的对象进行销毁,我们可以提供一个公有函数接口,用这个函数接口调用私有函数。

方案二:构造函数私有化

class Heaponly{
    public:
        static Heaponly*createObj(){
          return new HeapOnly;
       }
       Heaponly(const Heaponly&hp)=delete;
       Heaponly&operator=(const Heaponly&hp)=delete;
     private:
        Heaponly(){
        } 
}
int main(){
     Heaponly*ptr=Heaponly:createObj();
     
}

我们将构造函数私有,禁止任何方式创建示例。但是提供一个可以在堆上创建对象的公有函数,这样我们就可以通过公有函数来调用私有的构造函数。这里的要创建对象的公有函数应该 是static修饰 的,因为如果要调用公有函数,需要有一个对象示例,而我们要用公有函数创建一个示例,而我们现在没有对象示例,需要调用公有函数(类似鸡生蛋,蛋生鸡)…如果函数在静态区,就可以直接调用了。同时,为了防止我们创建的对象示例被拷贝构造或者赋值,所以我们还需要将拷贝构造函数和赋值运算符重载函数封死。

3.设计一个类,只能在栈上创建对象
构造函数私有化

class StackOnly
{
public:
	static StackOnly CreateObj()
	{
		StackOnly st;
		return st;
	}
private:
	StackOnly()
	{
	}
	//对一个类实现专属的operator new
	//如果对一个类实现一个专属的operator new,那么会调这个
	void* operator new(size_t size) = delete;
};

int main()
{
	StackOnly hp3 = StackOnly::CreateObj();
	StackOnly copy(hp3);
}

4.设计一个类、不能被继承
C++98
我们将构造函数私有化,派生类中调不到基类的构造函数,则无法继承。

class NonInherit
{
public:
	static NonInherit GetInstance()
	{
		return NonInherit();
	}
private:
	NonInherit()
	{
	}
}
C++11  final
class A final
{
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

特殊类设计 的相关文章

随机推荐

  • Java_mybatis-结果集映射-ResultType&ResultMap

    Mybatis返回值接收 可以使用两种方式进行参数的接收 resultType resultMap 这两种分别都是需要在Mapper xml文件中去设置的 当结果是一个简单的对象或者 list 或者 map 对象中没有嵌套对象 或者集合时
  • vue_table导出excel

    vue直接导出对应table const exportClick gt const wb XLSX utils table to book document querySelector newTables 关联dom节点 get binar
  • vue_域名部署无法访问后端

    前言 目前部署的比较另类 因为服务器为 windows 目前还不是很会 nginx 所以现在就只能在服务器上安装 nodejs 然后直接使用 npm run dev 命令行的方式运行项目 遇到的坑 使用ip访问前端的时候 就可以访问 但是通
  • 题解 | #密码合格# 把条件三“包含公共元素”去掉就好理解

    题解 E Easy problem E Easy problem刚刚随便交了一发过了 来讲下自己的做法 一眼没构出来 但是考虑到1e18的数有18位数 显然rand足够多次 大概率是可以得到 题解 考试分数 四 select job a d
  • 西瓜视频RenderThread引起的闪退问题攻坚历程

    背景 影响 西瓜之前存在过一类RenderThread闪退 从堆栈上看 全部都是系统so调用 给人的第一印象像是一个系统bug 无从下手 闪退集中在Android 5 6上 表现为打开直播间立即闪退 该问题在2022年占据Native Cr
  • 全球化需要先搬离中国?中国公司出海不应失去“模式自信”

    题解 取近似值 include
  • 华为od求捞

    字节 虾皮 算法面试 虾皮 算法工程师 一面面经 虾皮北京提前批 算法工程师 回暖分析 战绩结算 on 赛文X 爱奇艺 华为od求捞 情况 12月机考289 没有约到面试 普通本科 自考了河北大学计算机本科 有四年的软件开发工作经验 这种情
  • Java实现双链表的反转

    风控模型实习生招聘 度小满 上海 腾讯ssp后再次加面 Java实现双链表的反转 public static class DoubleNode public int value public 华为武研所有开奖的吗 ict 公共开发部的 Ja
  • 配置文件中的$和@

    配置文件中的 和 0 前言 借鉴文章 https blog csdn net Saintmm article details 124603343 https blog csdn net ster ben article details 11
  • Leetcode 剑指 Offer II 057. 存在重复元素 III

    统一消息推送 这个项目怎么样 能写吗 23届试用期被裁 该怎么办 上海华为无线hc充足 快来联系我 收到中石油规划总院的offer了 但薪资一般 准备下周签移动研究院了 华为云HR说现在内部主管在定薪 大佬们 给点意见啊 NVIDIA GP
  • 题解 | #返回顾客名称和相关订单号以及每个订单的总价#

    8 23作业帮一面凉经 921百度前端一面 百度前端一面凉经 德州仪器面试经验 德州仪器Ti技术销售工程师 TSE 面经 德州仪器技术销售工程师面试经验分享 百度前端一二面 小天才 一面 HR面完已挂 11 29 小米凉面 签offer前一
  • @ApiModel和@ApiModelProperty用法

    诗悦网络游戏测试面经 寄 回暖分析 战绩结算 on 赛文X 25届大三实习 字节跳动抖音智能创作后端开发实习生一二面面经 拼多多 非必要就别去了吧 唔唔 今年的校招补录还在进行噢 双9以上可以试下 赞 人保财险二面 细节见品格 北京下大雪后
  • IPQ4019/IPQ4029 router is used

    华为云区块链lab校招博士招聘 base北京深圳西安 流程超快 博导带队机会多多 感兴趣的小伙伴发邮件到daiwenhao9 huawei com 题解 矩阵交换 include
  • 题解|#F. Array Stabilization (GCD version)# cf

    实习一直在干打杂的活 24届211本文科女勇闯大厂产运岗 25届日常实习求助 想找产品 友塔游戏外推活动来啦 AAA品质开放世界项目诚邀您的加入 Java学习路线总结 拼多多 非必要就别去了吧 大佬们 帮帮我 offer选择 通信工程还有什
  • 题解 | #计算三角形的周长和面积#

    2本java 何去何从 回暖分析 战绩结算 on 赛文X 普通人的面试经验 回暖分析 战绩结算 on 赛文X 新凯来应届校招 有没有面试新凯来的友友 线下hr面大概问什么问题呀 几对一哇 需要准备几份简历哇 新凯来 34 回暖分析 战绩结算
  • GLAD:传输中的相位因子与古伊相移

    概述 与相同频率的平面波相比 聚焦高斯光束传输时会产生额外的相移 这种相移是由德国科学家Gouy发现的 故称为古伊相移 其定义为 其中zR为高斯光束的瑞利长度 z 0对应高斯光束的束腰位置 高斯光束传输经过束腰位置前后时对应的古伊相移为 高
  • 抗反射蛾眼结构的严格分析与设计

    摘要 对于许多光学应用来说需要减少表面反射 控制表面反射的一种非常有效的方法是使用抗反射的纳米或微米结构 启发来源于自然界 蛾眼 这些具有亚波长范围特征尺寸的结构表现出关于波长和角度依赖性的独特性质 在本文中 介绍了VirtualLab F
  • 偏振散射.

    Extended Scripted scatter 扩展的脚本散射模型 允许用户定义散射光线的偏振特性 下面的例子演示了散射模型的使用 其中光线在散射后沿局部X轴线S偏振 Scripted scatter 脚本散射 模型和Extended
  • 程序员视角体验快速搭建智能客服中心

    本篇文章授权活动官方亚马逊云科技文章转发 改写权 包括不限于在 亚马逊云科技开发者社区 知乎 自媒体平台 第三方开发者媒体等亚马逊云科技官方渠道 目录 前言 基本概念 工作原理 浅试体验 体验收获 最后 前言 Amazon Connect是
  • 特殊类设计

    1 请设计一个类 不能被拷贝 拷贝只会放生在两个场景中 拷贝构造函数 和 赋值运算符重载 c 98 将拷贝构造函数与赋值运算符重载 只声明不定义 并且将其访问权限设置为私有 即可 class Copyban Copyban const Co