c++ 编程
文章平均质量分 72
c++ 编程
hjjdebug
西方用26个字母表示世界,计算机用0,1两个数字表示世界,大道至简!
人类用6号元素碳来思考, 计算机用14号元素硅来演算,精妙绝伦!
展开
-
对象作为函数参数及对象作为返回值的工作过程
问: 类对象做为函数参数是怎样工作的?答: 对象作为函数参数是值copy, 会在栈上构建对象.然后调用子函数,函数操作的是栈上的临时对象.问: 类对象做为函数返回值是怎样工作的?答: 必不可少的会有一次赋值构造(=), 很可能还跟着2次copy构造, 一次是函数return了对象,return到何方? return 到赋值构造的源(=号的右值). 另一次是赋值构造(=)也会return对象,对象的目标肯定是return到=号的左值,原创 2024-09-10 11:07:07 · 320 阅读 · 0 评论 -
用vector 来排序字符串指针或结构指针
//采用自定义排序算法,才能灵活控制排序,//对结构数组指针排序,必需写自定义算法,花销会很小,因为排序挪动的数据只是个指针.//必需要加自定义排序算法comp, 否则就是对 char *本身的排序,达不到你的目的原创 2024-07-18 16:33:16 · 415 阅读 · 0 评论 -
带semaphore的buffer 应用实例
这是一个项目的缩减版.该项目内容是以一个恒定的码率去发送文件. 项目运行的很好,但是当在文件所在磁盘大量长时间 copy 文件时, 由于有大量磁盘读写操作,干扰了以恒定码率发送文件. 出现码率抖动. 意味着画面可能会卡顿.所以需要在外边包上一个外壳, 让外面的这个线程专门去抢磁盘资源, 放入缓存.则内层可以以恒定码率读取缓存,完成发送.这里对缓存的管理就引入了一个重要概念.gSemBufObj 对象. 带semaphore的缓存的管理对象.经实验效果不错. 分享这个模型代码以飨读者.原创 2024-03-18 10:25:35 · 731 阅读 · 0 评论 -
线程的通俗解释
1. 什么是线程? 2. 线程函数长得什么样? 3. 为什么要使用线程.4. 线程控制. 4.0 线程的执行和挂起 4.1: 线程中的互斥操作 4.2: 线程中的同步操作 4.3: 为什么不用全局变量作线程间控制变量? 4.4: 全局变量在线程同步或互斥中没有立足只地吗? 4.5: 线程的创建与销毁原创 2024-03-17 17:33:27 · 614 阅读 · 0 评论 -
将map 按值排序输出
手工构建一个简单的mapmap 不能直接排序,需要导出到vector,再按值排序即可.原创 2024-02-26 09:59:25 · 201 阅读 · 0 评论 -
c/c++ header_only 头文件实现的关键点
1. 对外声明的函数必需加上inline, 消除连接的歧义2. 在inline 函数内部声明的static 对象, 在多个文件包含时,对象是唯一的原创 2023-11-28 17:06:37 · 1526 阅读 · 0 评论 -
【 c++ 二元运算符重载,以<<(抽取符)为例,说清为什么它支持hex,endl等操作函数】
// c++2元运算符原创 2023-09-24 16:59:59 · 140 阅读 · 0 评论 -
c++实现的一个定时器实例
小结: 所谓的定时器, 当时间到时执行某一个任务,是通过启动一个线程来实现的,等待时是timer线程在等待,执行时是timer线程在执行.调用线程和执行线程是不同的线程原创 2023-09-23 12:05:47 · 416 阅读 · 0 评论 -
C++11 Lambda函数 入门
小结: lambda 函数存在的意义: lambda 函数可以直接访问父作用域变量(以值方式传递或以引用方式传递) [=]以值传递的方式捕获父作用域变量, 父作用域变量是不能直接修改的 加mutable 修饰符,就可以在函数体里修改, 但退出后值不变 [&]以引用方式捕获父作用域变量,就可以直接修改父作用域变量 于是乎, 当你在写一个函数时,如果你愿意,就可以随便再定义一个lambda函数, 它可以操控该函数的变量. 使得书写函数更灵活了!原创 2023-09-22 19:50:36 · 131 阅读 · 0 评论 -
说清楚 std::cout<<std::hex<<std::endl 到底是什么意思
在 "/usr/include/c++/9/bits/ios_base.h" 872行, 定义了hex 为一个函数,其参数是ios_base。# 在 "/usr/include/c++/9/iostream" 第107行, 定义了 ostream操作符原创 2023-07-12 17:34:25 · 556 阅读 · 1 评论 -
C++重载 抽取运算符 <<
/ cout 就是一个ostream 类的对象。//添加命名空间,否则会找不到ostream。return out;//返回ostream 对象则可以支持连续调用。//重载了ostream 操作符原创 2023-07-12 13:06:26 · 390 阅读 · 0 评论 -
c++字符特性模板char_traits,到底是什么?
小结:char_traits: 字符属性类. 处理的是字符类型在它的命名空间下,实现了以下基本操作函数,字符赋值,相等判别,小于判别,比较函数,长度,查找,移动,拷贝,类型变换,文件尾字符判别等。如果忽略命名空间,再固定上变量类型,那它就是纯c 函数.字符属性类也没有什么神秘性了,它是字符操作的一组函数,放到了char_traits 结构下.你还可以扩展一些你想要的函数.原创 2022-12-02 11:40:35 · 2076 阅读 · 0 评论 -
tinyxml 代码解读
tinyxml 是开源c++软件, 递归代码的特点: 易写易读难调.原创 2022-11-14 14:39:56 · 537 阅读 · 0 评论 -
TiniXml C++ 开源代码中的几个概念
数据交互问题,确实是一个问题.xml 就很好的解决了这个问题,它以文本方式解决了结构化数据传输问题.1. 它以代表元素的结束,解决了二进制流不区分元素的问题2. 它以键值对的方式解决了这个域叫什么名字,其值是多少或其值是什么的问题.原创 2022-11-14 15:47:29 · 848 阅读 · 0 评论 -
用std::condition_variable 实现的生产者,消费者同步的例子
/* std c++ 多线程同步的例子 * 用std::condition_variable 实现的生产者,消费者同步的例子 * 当条件满足了,生产者生产出了产品,消费者再消费数据. * 消费者要等待,生产者要通知消费者消费. * 简单就是美! */原创 2022-11-27 21:59:55 · 439 阅读 · 0 评论 -
std c++ 编写的 8 窗口出票模拟程序
/* std c++ 编写的 8 窗口出票模拟程序 * 简单就是美! */原创 2022-11-26 17:13:43 · 672 阅读 · 0 评论 -
std::c++ 中格式化任意字符串
向一块内存区格式化一个字符串,到底应该char[256],char[512],char[1024]?// Format: 像printf 一样工作,返回string 对象,支持任意复杂格式,任意长度字符串.原创 2022-11-24 19:41:34 · 1375 阅读 · 0 评论 -
c++ std::exception,std::logic_error 异常的使用方法
/显示了字符串类可以直接用+来连接。//exception 用法,如此访问异常。catch(exception &ex) // exception 的用法,如此接受异常。//exception 用法, 如此构造和抛出异常。在/usr/include/c++/9/stdexcept 文件中定义.c++ logic_error() 异常的使用方法。原创 2022-11-23 12:04:04 · 3026 阅读 · 0 评论 -
mtrace 追踪内存泄露使用心得
mtrace 使用心得: 报得很详细, 但对一些库之类的报得不一定准确.mtrace 是工作原理: 就是对malloc,free 等函数进行了hook使用: 见实例.简述为:甲: 编写1. 包含"mcheck.h"2. 设置环境变量,MALLOC_TRACE, 指明输出的文件名.3. 调用mtrace函数.乙: 编译:然后编译时加上-g debug选项, 还要加上-no-pie 去掉位置无关运行选项生成可执行代码.丙: 执行运行可执行文件,生成MALLOC_TRACE 指定的文件.丁原创 2022-04-06 09:53:03 · 860 阅读 · 0 评论 -
c++的重要特性之一,继承到底是什么概念呢?
----------------------------------------author:hjjdebugdate: Fri Aug 14 17:25:19 CST 2020----------------------------------------继承,简单的说就是你的就是我的.但到底是什么概念呢?1. 子类继承父类,是不是把父类的私有成员变量也继承了, 子类对象的大小是多少呢?2. 子类调用父类的成员函数,汇编程序是不是调整this指针然后才调用的父类地址?3. 外部调用子类原创 2020-08-14 17:49:45 · 196 阅读 · 0 评论 -
c++设计模式之概括--结构型模式
c++设计模式之概括–结构型模式结构类模式都是原来的类已经定型, 现在需要在原基础上进行一些优化,功能控制,功能扩充等,我们应该怎么做的问题. 那就是,保留一个原对象的指针, 当对我们的包装类调用的时候,我们要恰当的调用保留的对象的函数. 包装,当然是有目的的.结构型模式:适配器模式:将一个物件的界面’转接’成当事人预期的样子。 目的,协调两类工作桥接模式:将一个抽象与实现解耦,以...原创 2020-03-09 21:14:36 · 299 阅读 · 0 评论 -
c++设计模式之概括--构造型模式
c++设计模式之概括–构造型模式构造型模式有5种,工厂方法模式,虚拟工厂模式,单例模式,原型模式,构建者模式.她们的共同特点是封装了产品的构建过程. 简述如下:工厂方法模式:用工厂来创造产品.工厂方法模式用法:实例代码: Factory* fac = new ConcreteFactory(); //一个虚工厂指针指向实际工厂 Product* p = fac->Create...原创 2020-03-09 20:21:26 · 338 阅读 · 0 评论 -
何时使用工厂方法模式?
何时使用工厂方法模式?为什么要用工厂方法模式?为什么要多此一举用工厂方法?用new 创造产品与用工厂方法创造产品有什么不同?工厂方法有用吗?这些都是同一类问题.工厂方法是创造型模式的一个最典型模式, 理解了这个模式,其它创建型模式就好理解了.网络上文章洋洋洒洒,但大都不是简单明了的答案. 不能让人信服.是的,我创建一个产品,直接用new 一行代码创建就可以了.Product1...原创 2020-03-08 10:34:53 · 663 阅读 · 0 评论 -
重构switch-case 语句,实现对修改关闭,对扩展开放
小结: 通过简单的例子,说明了如何处理复杂的switch-case 语句, 怎样重构代码, 也说明了什么叫对修改关闭,对扩展开放.原创 2020-02-27 22:13:17 · 1593 阅读 · 1 评论 -
c++编程, 解除文件间的依赖关系,接口隔离原则
c++编程, 解除文件间的依赖关系,接口隔离原则这里所指的接口隔离,是把不同的接口包在不同的文件中.相关联的接口包在一个文件中.我曾经贪图方便,使用过集中管理的方式.集中管理的全局变量 global.h,global.cpp集中管理的全局函数 subs.h subs.cpp所有的全局变量放在一个文件中叫global.cpp其对应的头文件是global.h, 用以对外声明全局变量,...原创 2020-02-23 18:18:56 · 1026 阅读 · 0 评论 -
C++对象构建与使用,error: taking address of temporary [-fpermissive]
error: taking address of temporary [-fpermissive]获取临时对象的地址,编译器是不允许的.这里要理解什么是临时对象,临时对象就是无名对象,在语句行上直接用类生成一个对象,它的生命周期是在该行创建,又在该行销毁.对于一个已经销毁或行将销毁的对象,你拿到它的地址是没有意义的,所以编译器这个婆婆就武断的告诉你,别拿这个地址,你拿它没有用,不许拿,...原创 2019-11-01 14:55:00 · 11188 阅读 · 0 评论 -
TinyXml 使用举例
/********************************************************************************* * author: hjjdebug * date: 2011 * tinyxml, 有2个.h 文件, 4个cpp 文件。 * 对TinyXml 的理解,最好的办法是阅读代码 * xml 是一种层次状结构。x原创 2011-03-03 14:52:00 · 1061 阅读 · 0 评论 -
c/c++ vector 的简单实现
说其简单,是因为没有实现allocate 类, 而采用简单的malloc 分配内存。iterator 也采用直接的value_type 指针, 但保留了vector 的基本接口和方法。对理解vector 工作原理有帮助。代码及测试代码如下: #include "stdafx.h"template class vector{ enum{ SPACE_CAPACITY = 4 };/原创 2012-05-15 10:51:55 · 2819 阅读 · 0 评论 -
C++ 导出函数名的命名规则。
C++ 导出函数名的命名规则。原创 2011-03-30 15:01:00 · 6879 阅读 · 6 评论 -
使用DirectInput进行交互
使用DirectInput进行交互 (转帖)转载 2011-03-27 16:33:00 · 7509 阅读 · 0 评论 -
系统调用的简单封装类实现
系统调用的简单封装类实现, 实现了thread, process, semaphore, mutex 的封装。封装类,实际上是对调用接口的实现。 代码简练,可供参考。有一些最简单的单行代码封装,虽然没有什么意义,但从完整性上仍然可以保留。 具体参考代码。原创 2011-03-26 18:06:00 · 1256 阅读 · 1 评论 -
修改显示设置的简单封装类
修改显示设置的简单封装类. 就是对ChangeDisplaySettings, GetDevCaps 进行了简单封装。原创 2011-03-26 17:20:00 · 794 阅读 · 0 评论 -
死锁问题分析及解决办法
死锁问题:出现条件,至少两个线程,两把锁。 举例:两个线程为甲和乙, 两把锁为A 和 B.甲线程申请了锁A, 再申请锁B, 才能完成工作。乙线程申请了锁B, 再申请锁A, 才能完成工作。当甲线程申请到锁A, 等待锁B, 乙线程申请到锁B, 等待锁A, 就造成死锁。死锁后,甲,乙两线程均不能运行。解决办法: 打破这种互套关系即可。如果两把锁可以不互相嵌套, 则原创 2013-01-17 18:07:54 · 3517 阅读 · 0 评论 -
java 类与 c++类异同:
--------------------------------------------------------------------------------java 类与 c++类异同:书写格式上有些区别:1. java 成员函数在每一个函数上声明public, private. 而c++ 不是2. java 用int[] a, 声明a 是一个int型数组, 而c++用 int原创 2013-09-05 20:03:55 · 1678 阅读 · 0 评论 -
关于多重继承指针回退传递的细节。
--------------------------------------------------------------------------------关于多重继承指针回退传递的细节。1. 问题提出c 语言时代,有回调函数。 是说传递来一个函数指针,我们来调用这个函数。这样我们并不关心这个函数的实现,而只是关心这个函数的接口。即它的参数类型,参数个数。c++时代,进原创 2013-09-27 14:18:34 · 1271 阅读 · 0 评论 -
linux pthread_join & sigset 的使用例子
简单的例子包含了许多不易说明的问题,所以我喜欢简单例。另文件多用cpp命名,因为c++ compiler 比c 的更友好,功能更强,例如支持随意设置变量,支持bool 变量类型等...pthread_join 例gitserver@gitserver-desktop:~/share/hjj$ cat pthread_join.cpp #include #include原创 2012-05-24 09:39:19 · 1913 阅读 · 0 评论 -
c++ thinking, 在一个文件中只是实现了部分虚函数
------------------------------------------------------------Description: c++ thinking, 在文件中只实现部分虚函数author: hjjdebugdate: Fri Apr 10 14:40:13 CST 2015-------------------------------------------原创 2015-04-10 14:50:37 · 810 阅读 · 0 评论 -
c++ 模板类有感
stl 模板类给我们提供了极大的原创 2014-04-11 18:25:37 · 772 阅读 · 0 评论 -
c++构造函数中抛出异常的用途和用法
该实例用来帮助理解在构造函数中抛出异常的用途和用法。它有三个文件构成,关键点处都给出了注释。test.h, test.cpp,main.cpp$ cat test.h#ifndef __MYTEST_BASE#define __MYTEST_BASE#include using namespace std;class Component{public: Comp原创 2016-01-18 16:19:21 · 4375 阅读 · 1 评论 -
c/c++ 字符串解析
字符串解析,是一个字符串入,多个字符串出。更广泛的说是一个字符串入,一个数据结构变量出。解析字符最简单的命令是scanf. 它体现了重要思想。但是scanf 比较呆板,不够灵活, 当不能满足实际需要时,需要自己书写解析函数,下面分析一下解析的关键步骤:甲: 查找关键字符或字符串: / c / strchr, strstr, / c++ / find原创 2015-08-30 12:14:11 · 4153 阅读 · 0 评论