首页
学习
活动
专区
圈层
工具
发布

【C++】特殊类的设计

特殊类的设计 一、设计一个不能被拷贝的类 拷贝只会放生在两个场景中:拷贝构造函数以及赋值运算符重载,因此想要让一个类禁止拷贝,只需让该类不能调用拷贝构造函数以及赋值运算符重载即可。...: int main() { HeapOnly* hp = HeapOnly::CreateObj(); return 0; } 三、设计一个只能在栈上创建对象的类...首先我们先了解一下设计模式。 设计模式:设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。...使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。...,static 的类成员不算该类的成员,静态成员变量属于所有类的对象,属于整个类,即属于整个 Singleton 类。

22110

【C++】特殊类的设计

一、特殊类的设计 1、不能被拷贝的类 一个类不能被拷贝的需求还是比较常见的,比如IO流、线程等。...C++规定,如果一个类重载了专属的operator new,那就会调用这个operator new。...5、只能创建一个对象的类(单例模式) | 设计模式: 设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。...这些解决方案是久经考验的,被广大开发者反复使用,并且被证明在多种场景下都是有效的。设计模式提供了一种标准化的沟通方式,使得开发者可以用统一的语言来描述问题及其解决方案。...| 单例模式: 单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取该实例。

13510
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C++特殊类设计

    C++特殊类设计 零、前言 一、不能被拷贝 二、只能在堆上创建对象 三、只能在栈上创建对象 四、不能被继承的类 五、只能创建一个对象 1、饿汉模式 2、懒汉模式 零、前言 本章我们主要讲解学习特殊类的设计方式...,类里的函数能够调用私有化的构造函数 注:一定是静态的成员函数,静态成员函数不需要依赖对象进行调用,普通的成员函数则不行 示图: 三、只能在栈上创建对象 方式1: 显示声明并私有化operator...设计模式的概念: 设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结 使用设计模式的目的: 为了代码可重用性、让代码更容易被他人理解、保证代码可靠性...;设计模式使代码编写真正工程化 单例模式: 一个类只能创建一个对象,即单例模式,该模式可以保证系统中该类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享 比如: 在某个服务器程序中...对于多个单例类的如果具有依赖关系的话,则无法进行控制定义顺序(静态变量) 2、懒汉模式 懒汉模式则是需要的时候在第一次调用的时候进行创建 示例代码: class Singleton {

    43320

    C++特殊类设计

    设计一个类,使其只能在堆上创建 2.1 方式一 只能在堆上创建,那么我们就只能通过申请资源的方式创建对象。...并且还要禁掉new,在C++中,new是由operator new和构造函数组成的,那我们就得重载一个operator new函数,并且禁掉。...单例模式(设计一个类,只能创建一个对象)) 4.1 设计模式 设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。...并且要实现一个接口函数来返回一个对象,并且这个对象必须是static,因为返回的必须是全局的,而不是局部的。 接口函数也要设计为static的,因为构造函数私有,不能通过对象调用,只能用类域调用。...,迟迟进不了main函数,第二就是,如果对于多个单例类对象具有初始化依赖关系,饿汉模式无法满足,比如对于A和B两个单例类对象,如果要求A先创建,B后创建,饿汉模式无法满足。

    16710

    C++设计的禁忌与救赎:特殊类设计

    1.请设计一个类,不能被拷贝 涉及拷贝的只有拷贝构造和赋值重载,把这些禁用了就行了 class CopyBan { // ......CopyBan& operator=(const CopyBan&) = delete; //... }; 对于 C++11,直接在默认成员函数后跟上 = delete,表示让编译器删除掉该默认成员函数 2.请设计一个类...::CreateObject() 可直接通过类名调用 3.请设计一个类,只能在栈上创建对象 class StackOnly { public: static StackOnly CreateObj()...,则无法继承 class A final { // .... }; final 关键字,final 修饰类,表示该类不能被继承 5.请设计一个类,只能创建一个对象(单例模式) 单例模式: 一个类只能创建一个对象...、缓存构建) 这些操作会阻塞进程的启动流程,导致启动时间明显增加 全局静态对象的初始化顺序问题: 在 C++ 中,多个全局静态对象的初始化顺序是未定义的(由编译器和链接器决定),若某个饿汉单例 A 依赖另一个全局对象

    11200

    【C++】特殊类的设计 | 类型转换

    特殊类的设计 单例模式 设计模式是 被反复使用 多数人知晓 经过分类的、代码设计经验的总结 ---- 单例模式: 一个类只能创建一个对象 即单例模式,该模式可以保证系统中该类只有一个实例 单例模式分为饿汉模式和懒汉模式...C++的类型转换 C语言的类型转换 C语言有隐式类型转换 和显式类型转换 i为int类型,想要转化为double类型,就需要进行隐式类型转换 即 先将i赋值给一个double类型的临时变量,再通过临时变量赋值给...d p作为一个指针,i作为一个int类型变量,虽然都是4个字节,但是意义不同,所以不能互相转,只能进行显式类型转换 即 将int*类型的指针强转为int类型 C++的类型转换 隐式类型转化 存在精确度丢失的问题...显式类型转化 存在代码不够清晰的问题 所以C++提出了自己的类型转化风格,引入四种强制类型转换操作符 static_cast reinterpret_cast const_cast dynamic_cast...a值而不是内存中的a值,所以a依旧为10 dynamic_cast C++独有的 dynamic_cast用于将一个父类对象的指针/引用转换为子类对象的指针或引用(动态转换) 父类作为上 ,子类作为下

    37330

    初识C++ · 特殊类设计

    前言: 类的种类繁多,面对不同的场景衍生出了不同的类,每个类各有特点,比如有的类不能被拷贝,有的类不能在堆上创建,有的类不能只能在堆上创建。 那么今天,我们就来介绍一些特殊的类。...1 设计一个只能在堆上创建的类 只能在堆上创建也就是只能通过new的方式来创建,那么我们肯定是不能让编译器调用默认构造函数的,调用了就代表是栈上创建的。...同上文一样,设计一个只能在栈上创建的,还是从构造函数入手,可以发现,对类有点特殊要求的,在构造函数上面动的操作比较多。...4 设计一个不能被继承的类 这个就很简单了,直接final安排就可以,当然,C++98里面还是将构造函数私有了,这样也访问不到了: class Base final { public: private...: int _a; int _b; }; class Derive : public Base { }; 5 设计一个只能被创建一次的类 这里是本文的重点,这是一种单例模式,属于一种设计模式,我们在此之前接触过许多设计模式

    14410

    C++设计类的注意事项

    在定义派生类的赋值操作符重载函数时,要显式地在函数块中通过::来调用基类的赋值操作符,来操作基类的成员,毕竟派生类很多时候无法直接访问到基类成员,只能通过调用基类的公开方法来访问,而且也不能通过初始化列表的方式来调用...基类的析构函数最好定义成虚函数(virtual),这样当释放一个基类指针指向的派生类时,也会自动先调用派生类的析构函数,然后才调用基类的析构函数,否则会只调用基类的析构函数,这样派生类用new初始化的成员将得不到释放...另外,也由于C++支持用基类的引用指向派生类时,对于虚函数会调用其真实类型的函数,这保证了灵活的使用。只是要注意如果在函数中不修改对象,最好用const修饰对象参数,避免修改。...虚函数的意义是当用基类的指针或引用指向对象时(不管指向的是基类对象还是派生类对象),调用虚函数会根据对象真实类型调用对应方法。...,其所有派生类和派生类的派生类的此方法都是虚方法。

    49220

    C++类的设计与实现规范

    类是面向对象程序设计的最主要的元素,遵循必要的规范,设计出性能优良的类,并以适当的方式实现,是编写出高质量程序的关键。 1.规范一 将类的定义放在头文件中实现。...在设计一个类的时候,如果把它的数据成员访问权限设为public和protected,会带来如下影响。...一般来说,类的定义放在头文件中,使用时被不同的源文件包含,如果类成员函数定义在类体内,将会是代码体积增大,影响阅读,不利于类的修改与维护。 (2)泄露类的实现细节。不利于保护设计者的合法权益。...(3)会存在潜在的风险,如果类的成员函数存在多重定义,由于类不具有外部连接特性,C++编译器不能充分检查出类定义的二义性。...---- 参考文献 [1]陈刚.C++高级进阶教程[M].武汉:武汉大学出版社,2008[4.10(P164-P167)]

    62820

    C++类的设计与实现规范

    类是面向对象程序设计最主要的元素,遵循必要的规范,设计出性能优良的类,并以适当的方式实现,是编写出高质量程序的关键。...一般来说,类的定义放在头文件中,使用时被不同的源文件包含,如果类成员函数定义在类体内,将会是代码体积增大,影响阅读,不利于类的修改与维护。 (2)泄露类的实现细节,不利于保护设计者的合法权益。...(3)会存在潜在的风险,如果类的成员函数存在多重定义,由于类不具有外部连接特性,C++编译器不能充分检查出类定义的二义性。...inline函数,不具有外部连接性,导致连接时也未发现重定义错误。...---- 参考文献 [1]陈刚.C++高级进阶教程[M].武汉:武汉大学出版社,2008.4.10类的设计与实现规范.P164-P167

    1.3K22

    【C++】特殊类设计和C++的类型转换

    今日更新了C++特殊类和强制类型转换的相关内容 欢迎大家关注点赞收藏⭐️留言 不能被拷贝的类 拷贝只会发生在两个场景中:拷贝构造函数以及赋值运算符重载,因此想要让一个类禁止拷贝, 只需让该类不能调用拷贝构造函数以及赋值运算符重载即可...class A final { // .... }; 只能创建一个对象的类(单例模式) 设计模式: 设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结...设计模 式使代码编写真正工程化; 单例模式: 一个类只能创建一个对象,即单例模式,该模式可以保证系统中该类只有一个实例,并提供一个 访问它的全局访问点,该实例被所有程序模块共享。...C++提出了自己的类型转化风格,注意因为C++要兼容C语言,所以C++中还可以使用C语言的转化风格。...c++设计了 dynamic_cast 进行动态转换。

    36910

    C++精通之路:设计模式(特殊类设计)

    这是我参与「掘金日新计划 · 10 月更文挑战」的第6天,点击查看活动详情 C++精通之路:设计模式(特殊类设计) 本节内容: 介绍常见特殊类的设计方式 1.请设计一个类,只能在堆上创建对象...请设计一个类,只能在栈上创建对象 方法一: 同理,将构造函数私有化,然后设计静态方法创建对象返回即可。...请设计一个类,不能被继承 C++98方式 // C++98中构造函数私有化,派生类中调不到基类的构造函数。...请设计一个类,只能创建一个对象(单例模式) 设计模式 介绍: 设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。...使用设计模式的目的: 为了代码可重用性 让代码更容易被他人理解 保证代码可靠性。 设计模式使代码编写真正工程化 设计模式是软件工程的基石脉络,如同大厦的结构一样。

    65510

    c++课程设计具有简单功能的通讯录管理系统

    g)将联系人的信息从手机卡上转存到手机上(同时要避免重复数据的存在) 5.要支持继承、多态、重载(运算符重载、函数重载)等面向对象的基本特点 6.提交程序源码和课程设计报告。...这是一个数据库类,继承于通讯簿抽象类):用于记录手机中存储的所有联系人的信息 数据成员包括: 手机联系人的数量 手机联系人对象数组...这是一个数据库类,继承于通讯簿抽象类):用于记录手机中存储的所有联系人的信息 数据成员包括: 手机联系人的数量 手机联系人对象数组...这是一个操作类,完成通讯簿的操作):用户拥有两个通讯簿(一个是手机中存储的联系人,一个是手机卡中存储的联系人),并且可以对通讯录进行管理 数据成员包括: 两个通讯簿对象...成员函数包括(成员函数体现用户的行为): 添加联系人:利用基类指针,调用相应的通讯簿对象(手机通讯簿或手机卡通信簿)的增加函数完成联系人的添加。

    95810

    如何设计一个C++的类?

    什么是类? 我理解类是现实世界的描述,是对业务的抽象,类设计的好不好多半取决于你抽象的巧不巧。...类的设计最重要的一点是要表示来自某个领域的概念,拿我最近在做的音视频剪辑来举例,剪辑业务中有轨道的概念,也有片段的概念,每个轨道可包含多个片段,这时候就有些问题需要考虑,在现实世界中,轨道可以复制吗?...一个类具有移动构造函数才具备移动语义,如果追求资源管理的效率,move资源效率一般会比拷贝一个资源高一些。...关于异常处理详细的介绍可以看我这篇文章:《你的c++团队还在禁用异常处理吗?》...tips:对于设计模式而言,不能一步到位,刚开始编程时不要把太多精力放到设计模式上,需求总是变化的,刚开始着重于实现,一般敏捷开发后为了应对变化重构再决定采取合适的设计模式。

    1.8K20

    特殊类设计以及C++中的类型转换

    请设计一个类,只能在堆上创建对象 实现方式: 将类的构造函数私有,拷贝构造声明成私有。防止别人调用拷贝在栈上生成对象。...请设计一个类,只能在栈上创建对象 将构造函数私有化,然后设计静态方法创建对象返回即可。...请设计一个类,不能被继承 C++98: C++98中构造函数私有化,派生类中调不到基类的构造函数。...请设计一个类,只能创建一个对象(单例模式) 一个类只能创建一个对象,即单例模式,该模式可以保证系统中该类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。...C++的强制类型转换 标准C++为了加强类型转换的可视性,引入了四种命名的强制类型转换操作符: static_cast、reinterpret_cast、const_cast、dynamic_cast

    39210

    设计一个类使其具有动态属性,承接灵活可变的动态JSON

    前言 在 java 中,如何让一个类具有动态属性。这里将介绍一种技巧,可以使得你的类,具有良好的动态属性的能力。...普遍的做法是在类中申明一个 map 属性,把想要扩展的属性放入这个 map 中,这样就可以使得类具有动态属性的能力了。...一、普遍的 普遍的-类定义类中申明一个 map 属性,把想要扩展的属性放入这个 map 中,这样就可以使得类具有动态属性的能力了。...copy 在来一次是不可能的,但我们可以用接口的方式,也就是接下来要说的 较好的。 二、较好的 动态属性接口 用接口的方式来实现动态属性,可以使得实现接口的类都具有现动态属性的功能。...之后 我们还想让其他类具有动态属性,只需实现接口和声明一个 AttrOptions 变量就可以了,是不是很简单。

    67810
    领券