自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 浅谈C++ overload(重载) override(覆盖) overwrite(重写)

1.如果是在相同的作用范围(全局范围,局部范围,或同一个类中),那么只能发生重载overload;2. 如果是分别在父类和子类中,并且父类函数没有virtual关键字,那么只能发生重写overwrite;3. 如果是分别在父类和子类中,并且父类函数有virtual关键字,那么需要根据函数的参数和返回值是否相同进行判断:

2024-05-08 14:51:56 914

原创 浅析vector之clear、resize、reserve方法对size()和capacity()的影响

clear、resize和reserve方法在使用上非常简单,但是需要注意对容器底层的内存空间的影响,特别是使迭代器失效的情况。

2024-04-19 15:32:26 553

原创 《C++20设计模式》学习笔记——第13章职责链模式

职责链模式是一种非常简单的设计模式,允许组件依次处理命令(或查询)。职责链最简单的实现只需要维护一个指针链。理论上,如果想快速删除链上的对象,也可以用普通的vector或者list来代替指针链。代理链的实现则更加复杂,它利用了中介者模式和观察者模式,允许通过事件(信号)处理查询,让每个订阅者在将查询值返回给用户之前对最初传递的值(它是贯穿整个链的单个引用)进行修改。

2024-02-27 17:20:52 947

原创 《C++20设计模式》学习笔记——第12章代理模式

代理模式也是用于强化对象的功能,但其目标是在提供某些内部功能的同时准确(或尽可能地)保留正在使用的API。代理不会尝试通过添加新成员来扩展对象的功能————它所做的只是强化现有成员的潜在行为。代理主要作为一种替代品,并且有许多不同的类型:1. 属性代理:是底层成员的替身,可以在分配或访问期间替换成员并执行其他操作。2. 虚拟代理:为底层成员提供虚拟访问的接口,并且实现了诸如惰性加载的功能。3. 通信代理:允许在改变了对象的物理位置的情况下使用同样的API。4. 值代理:可以替换单个(标量)值。

2024-02-22 17:57:29 843

原创 《C++20设计模式》学习笔记——第11章享元模式

"享元"有时也称为token或cookie,是一个临时组件,扮演者“智能引用”的角色。享元模式通常用于具有大量非常相似的对象的场景,并且希望存储所有这些值的内存开销最小。它的具体体现是多种多样的:* 有时会将享元类作为API token返回,以对该享元进行修改;* 有时候享元是隐式的,隐藏在幕后——就像User示例,客户端并不知道程序中实际使用的享元。

2024-02-22 09:54:32 339

原创 《C++20设计模式》学习笔记——第10章外观模式

外观模式是一种为复杂子系统提供简单对外接口的方法。这里所说的“系统”可以是一组组件,也可以是具有相当复杂API的单个组件。它使用户更容易使用我们开发的程序,同时也允许高级用户针对特定需求利用外观模式进行附加功能的开发和调整。

2024-02-21 14:49:41 322

原创 《C++20设计模式》学习笔记——第9章装饰器模式

装饰器在遵循开闭原则的同时为类提供了额外的功能。它的关键特点是可组合性,多个装饰器可以以任意顺序作用于对象:动态装饰器可以存储对被装饰对象的引用(如果需要,甚至可以存储整个值!)并提供动态(运行时)可组合性,但代价是无法访问底层对象自己的成员。静态装饰器使用mixin继承(从模板参数继承)在编译时组合装饰器,这虽然失去了运行时的灵活性(无法重新组合对象),但允许访问底层对象的成员。这些对象也可以通过构造函数转发进行完全初始化。

2024-02-20 16:39:04 899

原创 《C++20设计模式》学习笔记——第8章组合模式

很显然,对象通常由其他对象组成(换言之,其他对象聚合成一个对象)。展示对象的组成成员的方式很少,本质上,组合模式为单个对象和容器对象提供了相同的接口。组合模式通常应用于整个类,不过我们先展示如何在类的属性上使用组合模式。

2024-02-20 10:52:52 945

原创 《C++20设计模式》学习笔记——第7章桥接模式

桥接模式的概念很简单,它通常作为连接器或黏合剂,将两个“不相关”的组件连接起来。抽象(接口)的使用允许组件之间在不了解具体实现的情况下彼此关互。,桥接模式的参与者确实需要意识到彼此的存在,这与中介者模式形成了对比,中介者模式允许对象在毫不知晓对方的情况下进行通信。

2024-02-06 15:04:57 394

原创 《C++20设计模式》学习笔记——第6章适配器模式

国际旅行时,旅行适配器让我可以将欧洲插头插入英国或美国的插座,这与适配器模式非常相似:有时候,我们想根据已有的接口得到另一个不同的接口,在接口上构建一个适配器就可以达到此目的。适配器模式存在的真正问题是,在适配过程中,有时会生成临时数据以满足其他接口的要求。当发生这种情况时,我们可以采用缓存策略,确保只在必要时生成新的数据。当缓存的数据发生变化时,需要清理缓存过程中过时的数据。

2024-02-06 11:25:02 827

原创 《C++20设计模式》学习笔记——第5章单例模式

在设计模式的有限历史中,单例(Singleton)模式也许是最令人讨厌的设计模式了。不过这并不意味着我们不应该使用单例模式:马桶刷也不是让人喜欢的设备,但它是生活中必需的(-_-)。单例模式的理念非常简单:应用程序中只能有一个特定组件的实例。如果必须使用单例模式,请尝试避免直接使用它,将其指定为依赖项,并保证所有依赖项都是从应用程序的某个唯一的位置(如控制反转容器)获取或初始化的。

2024-02-05 11:45:41 915

原创 《C++20设计模式》学习笔记——第4章原型模式

现实生活中,对于一些日常使用的较复杂的产品,比如汽车或手机,它们并不是从零开始设计的;相反,通常会基于一个现有的设计方案并对其进行适当的改进。这是普遍存在的场景,在软件世界中也有类似的情形:相比从零开始创建对象(此时构造器模式和工厂可以发挥作用),我们更希望使用预先构建好的对象或其拷贝,然后基于此做一些自定义设计。

2024-02-05 10:21:43 833

原创 《C++20设计模式》学习笔记——第3章:工厂方法和抽象工厂模式

工厂方法是创建型设计模式的成员之一,它可以一次性完成一个完整对象的创建;与之相比,构造器模式则需要分步提供对象的部分信息才能逐步完成一个对象的创建。工厂方法的关键优势包括:工厂可以拒绝构建对象; 工厂方法可以是多态的;工厂方法的命名不受约束并且可以更有意义;工厂可以实现缓存和其他储存优化;工厂可以将对象不同的关注点内容封装(即关注点分离)。

2024-02-04 17:47:54 822

原创 《C++20设计模式》学习笔记配套代码

由于该书并没有提供配套源码,书中的代码由于篇幅或翻译原因,有不少省略甚至错误,无法直接运行,感觉比较打击学习者的信心。并且在网上公开资源也没有找到完整的代码。因此,我准备将个人在学习过程中的代码提交上来,供同行者参考。

2024-02-02 18:01:48 572 3

原创 《C++20设计模式》学习笔记——第2章构造器模式

本文是《C++20设计模式——可复用的面向对象设计方法》一书第二章的学习笔记。构造器模式主要关注复杂对象的创建过程。复杂对象指的是难以通过调用单行构造函数来创建的对象。这些类型的对象本身可能由其他对象组成,并且可能涉及不太明显的逻辑,因此需要专门设计单独的组件来创建。

2024-02-02 17:33:16 897

原创 《C++20设计模式》学习笔记——第1章引论

本文是《C++20设计模式——可复用的面向对象设计方法》一书第一章的学习笔记,主要介绍一些在C++世界里很重要的概念,并且这些概念会在后续的模块章节中反复出现,值得进行熟悉。

2024-02-02 14:28:03 840

原创 Ubuntu 16.04下 vscode不支持C++11语法的解决办法

问题:在ubuntu16.04操作系统下,vscode中配置完成c++环境后,c++源代码对c++11的语法会报错,如图:如图:auto类型变量和范围for循环报错。但是仍然可以运行出正确结果。。。在尝试了其他博主所说的在tasks.json文件的args参数中添加“-std=c++11”之后依然报错。于是上vscode的官网查询用户手册,网址:https://code.visualstudio.com/docs/cpp/config-linux手册中提到:如果希望更改c++标准

2021-02-07 16:59:24 1315 3

《C++20设计模式》学习笔记-第13章职责链模式-配套代码

《C++20设计模式》学习笔记-第13章职责链模式-配套代码

2024-02-27

《C++20设计模式》学习笔记-第12章代理模式-配套代码

《C++20设计模式》学习笔记-第12章代理模式-配套代码

2024-02-22

《C++20设计模式》学习笔记-第11章享元模式-配套代码

《C++20设计模式》学习笔记-第11章享元模式-配套代码

2024-02-22

《C++20设计模式》学习笔记-第9章装饰器模式-配套代码

《C++20设计模式》学习笔记-第9章装饰器模式-配套代码

2024-02-20

《C++20设计模式》学习笔记-第8章组合模式-配套学习代码

《C++20设计模式》学习笔记-第8章组合模式-配套学习代码

2024-02-20

C++20设计模式学习笔记-第7章桥接模式学习代码

C++20设计模式学习笔记-第7章桥接模式学习代码

2024-02-06

《C++20设计模式》学习笔记-第6章适配器模式学习代码

《C++20设计模式》学习笔记-第6章适配器模式学习代码

2024-02-06

《C++20设计模式》学习笔记-第5章单例模式

《C++20设计模式》学习笔记-第5章单例模式

2024-02-05

c++20设计模式-第4章-原型模式代码

c++20设计模式-第4章-原型模式代码

2024-02-05

《C++20设计模式》学习笔记-第3章工厂方法和抽象工厂模式学习代码

《C++20设计模式》学习笔记-第3章工厂方法和抽象工厂模式学习代码

2024-02-04

《C++20设计模式》学习笔记-第2章构造器模式学习代码

《C++20设计模式》学习笔记-第2章构造器模式学习代码

2024-02-04

《C++20设计模式》学习笔记-第1章引论学习代码

《C++20设计模式》学习笔记-第1章引论学习代码

2024-02-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除