![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
文章平均质量分 92
小林coding
公众号 : 「小林coding」 专注图解计算机基础,期待你的关注,保证把你图解的明明白白。
展开
-
「C++ 」借来的资源,如何还的潇洒?
有借有还,再借不难!原创 2020-02-26 22:13:25 · 2000 阅读 · 0 评论 -
「C++ 篇」答应我,别再if/else走天下了可以吗
在写 if / else,锤自己!原创 2020-02-15 13:24:42 · 2910 阅读 · 0 评论 -
学过 C++ 的你,不得不知的这 10 条细节!(附思维导图)
前言我在阅读 《Effective C++ (第三版本)》 书时做了不少笔记,从中收获了非常多,也明白为什么会书中前言的第一句话会说:对于书中的「条款」这一词,我更喜欢以「细节」替换,毕竟年轻的我们在打 LOL 或 王者的时,总会说注意细节!细节!细节~ —— 细节也算伴随我们的青春的字眼针对书中的前两个章节,我筛选了 10 个 细节(条款)作为了本文的内容,这些细节也相对基础且重要。针...原创 2020-02-12 21:03:11 · 2462 阅读 · 0 评论 -
C++ 模板常见特性(函数模板、类模板)
背景C++ 是很强大,有各种特性来提高代码的可重用性,有助于减少开发的代码量和工作量。C++ 提高代码的可重用性主要有两方面:继承模板继承的特性我已在前面篇章写过了,本篇主要是说明「模板」的特性。使用「模板」的特性设计,实际上也就是「泛型」程序设计。函数模板01 变量交换函数模板假设我们设计一个交换两个整型变量的值的函数,代码如下:// 交换两个整型变量的值的Swap函数:...原创 2020-01-09 09:50:00 · 2037 阅读 · 0 评论 -
C++ 自增、自减运算符的重载和性能分析
01 ++、–运算符重载函数的格式自增运算符和自减运算符是有前置和后置之分的,如:a++ // 后置自增运算符++a // 前置自增运算符b-- // 后置自减运算符--b // 前置自减运算符为了区分所重载的是前置运算符还是后置运算符,C++规定:前置运算符作为一元运算符重载,重载为成员函数的格式如下:T & operator++(); // 前置自增运算...原创 2019-12-04 22:48:43 · 2117 阅读 · 0 评论 -
C++ 流插入和流提取运算符的重载
01 流插入<<运算符的重载C++ 在输出内容时,最常用的方式:std::cout << 1 <<"hello";问题:那这条语句为什么能成立呢?cout 是什么?"<<" 运算符能用在 cout 上呢?原因:实际上,cout 是在 iostream 头文件中定义的 ostream 类的对象。“<<” 能够用在 c...原创 2019-12-02 12:29:44 · 3281 阅读 · 0 评论 -
C++ 手把手教你实现可变长的数组
01 实现自定义的可变长数组类型假设我们要实现一个会自动扩展的数组,要实现什么函数呢?先从下面的main函数给出的实现,看看有什么函数是需要我们实现的。int main(){ MyArray a; // 初始化的数组是空的 for(int i = 0; i < 5; ++i) a.push_back(i); // push_back是成员函数 ...原创 2019-12-01 21:44:07 · 6144 阅读 · 0 评论 -
C++ 赋值运算符‘=‘的重载(浅拷贝、深拷贝)
01 赋值运算符重载的需求有时候希望赋值运算符两边的类型可以不匹配,比如:把一个 int 类型变量赋值给一个Complex(复数)对象,或把一个 char* 类型的字符串赋值给一个字符串对象,此时就需要重载赋值运算符‘=’。需要注意的是:赋值运算符 = 只能重载为成员函数。02 赋值运算符重载的例子下面我们以自定义一个自己的字符串类代码的例子,讲解赋值运算符的重载函数。class My...原创 2019-12-01 21:43:15 · 2700 阅读 · 0 评论 -
C++ 运算符重载的基本概念
01 运算符重载的需求C++ 预定义的运算符,只能用于基本数据类型的运算:整型、实型、字符型、逻辑型等等,且不能用于对象的运算。但是我们有时候又很需要在对象之间能用运算符,那么这时我们就要重载运算符,使得运算符能用于对象之间的运算。比如,在数学上,两个复数可以直接进行+、-等运算,但在C++中,直接将+或-用于复数对象是不允许的。有时会希望,让对象也能通过运算符进行运算。这样代码就更简洁,也容...原创 2019-12-01 21:41:53 · 1644 阅读 · 0 评论 -
C++ const常量对象、常量成员函数和常引用
01 常量对象如果不希望某个对象的值被改变,则定义该对象的时候可以在前面加const关键字class CTest{public: void SetValue() {}private: int m_value;};const CTest obj; // 常量对象02 常量成员函数在类的成员函数后面可以加const关键字,则该成员函数成为常量成员函数。在常量成...原创 2019-11-28 23:39:22 · 1915 阅读 · 0 评论 -
C++ 成员对象和封闭类
01 成员对象与封闭类类里有其他对象则该对象叫成员对象;有成员对象的类叫 封闭类;class CTyre // 轮胎类{public: // 有参数构造函数 // 初始化成员变量m_radius和m_width CTyre(int r, int w):m_radius(r),m_width(w) { }private: int m_radius; // ...原创 2019-11-28 23:38:39 · 1805 阅读 · 0 评论 -
C++ static静态成员
01 基本概念静态成员:在定义前面加了static关键词的成员。class A{public: A(int a, int b):m_a(a),m_b(b) { num += m_a + m_b; } ~A(){ } void Fun(); // 普通成员函数 static void ...原创 2019-11-28 23:37:56 · 1572 阅读 · 0 评论 -
C++ this指针的理解和作用
01 C++ 程序到 C 程序的翻译要想理解 C++ 的 this 指针,我们先把下面的 C++ 代码转换成 C 的代码class Car {public: int m_price; // 成员变量 void SetPrice(int p) // 成员函数 { m_price = p; }};int main(){ Car car; car....原创 2019-11-28 23:36:52 · 2030 阅读 · 1 评论 -
C++ 线程安全的单例模式总结
什么是线程安全?在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等意外情况。如何保证线程安全?给共享的资源加把锁,保证每个资源变量每时每刻至多被一个线程占用。让线程也拥有资源,不用去共享进程中的资源。如: 使用threadlocal可以为每个线程的维护一个私有的本地变量。什么是单例模式?单例模式指在整个系...原创 2019-08-30 21:29:36 · 2311 阅读 · 0 评论 -
Linux C 后台服务程序单进程控制
介绍通常后台服务器程序都必须有且只有一个进程,那么如何单进程呢?本例子是通过flock函数对/var/run/myserver.pid记录pid文件的进行加锁若加锁不正常,说明后台服务进程已经在运行了,这时则直接报错退出若加锁成功,说明后台服务进程没有在运行,这时可以正常启用进程后台服务程序单进程控制详细不多说,直接看代码#include <stdio.h>#in...原创 2019-08-31 16:45:01 · 1529 阅读 · 0 评论 -
C++ 并发编程之互斥锁和条件变量的性能比较
介绍本文以最简单生产者消费者模型,通过运行程序,观察该进程的cpu使用率,来对比使用互斥锁 和 互斥锁+条件变量的性能比较。本例子的生产者消费者模型,1个生产者,5个消费者。生产者线程往队列里放入数据,5个消费者线程从队列取数据,取数据前需要判断一下队列中是否有数据,这个队列是全局队列,是线程间共享的数据,所以需要使用互斥锁进行保护。即生产者在往队列里放入数据时,其余消费者不能取,反之亦然。...原创 2019-09-01 10:33:14 · 1998 阅读 · 0 评论 -
C++ 深入浅出工厂模式(初识篇)
工厂模式的实现方式可分别简单工厂模式、工厂方法模式、抽象工厂模式,每个实现方式都存在优和劣。原创 2019-09-15 21:21:07 · 1628 阅读 · 0 评论 -
C++ 深入浅出工厂模式(进阶篇)
本文进阶篇,主要是将工厂类的封装性提高,达到新增产品时,也不需要修改工厂类,不需要新增具体的工厂类。封装性高的工厂类特点是扩展性高、复用性也高。原创 2019-09-15 21:25:59 · 1514 阅读 · 0 评论 -
C/C++ 修改系统时间,导致sem_timedwait 一直阻塞的问题解决和分析
修改系统时间,导致sem_timedwait 一直阻塞的问题解决和分析介绍最近修复项目问题时,发现当系统时间往前修改后,会导致sem_timedwait函数一直阻塞。通过搜索了发现int sem_timedwait(sem_t *sem, const struct timespec *abs_timeout);传入的第二个阻塞时间参数是绝对的时间戳,那么该函数是存在缺陷的。sem_time...原创 2019-08-17 18:17:37 · 4055 阅读 · 2 评论