![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
文章平均质量分 69
写了程序换酒钱
Want to be a geek!!!
展开
-
C++中的类型转换
1.const_cast 看见const,大家第一反映就是关键字,对这个类型装换和const关键字相关。这个类型转换用来舍弃变量的不可变特性。实际在过程中,其实我们不许要使用这个类型转换。但是可能在使用第三方库的时候不如你所愿,库对你是不可见的,所以你需要这个转换。2.static_cast static_cast是我们使用的最多的类型转换。它显示地执行C++语言直接支持的转原创 2013-05-20 21:00:47 · 836 阅读 · 0 评论 -
发布一个打飞机游戏
基本的类图效果图代码可以去OSCHINA找原创 2013-09-07 20:23:53 · 1851 阅读 · 1 评论 -
静态断言
#include template class Assert;template{};int main(){ std::cout << "Hello World!" << std::endl; Assert a; return 0;}原创 2014-04-24 13:33:19 · 892 阅读 · 0 评论 -
policy和policy class 一
在linux系统的设计过程中,策略和机制分离是很重要的设计原创 2014-04-28 22:18:02 · 1633 阅读 · 0 评论 -
static 和 no static Member function学习
在C++中,实现语言时以及编译器处理时,他们做了什么,而对我们使用者来说,其又为我们使用提供了什么。static member function和nostatic member function在内存中都表现为函数,可是为什么static member function可以通过一般的函数指针来使用,可以作为callback。nostaitc member function,编译器到底对他们做了什么,我们是否可能不通过object来调用它们?原创 2014-07-19 09:09:34 · 2621 阅读 · 0 评论 -
class中指向Data Members的指针
在C++中class中Data Members的指针代表的shi原创 2014-06-11 08:19:08 · 1416 阅读 · 0 评论 -
Object-base编程
在C++中,一般的架构设计都是基于多态,基于接口编程。一般的是基类提供接口,子类根据具体的业务逻辑来实现接口,以此来提供程序设计的过程中的可注入性,提高灵活性,但是事实可能不经如此。引入了多态,其实也就是引入了耦合,其强制规定了继承基类和接口的形式,这在整体继承体系中都是不可以更改的。C++0x中的bind函数和function模板类为我们提供了很好的设计解决方案,提供多态基于函数对象,其只和函数的返回值和参数有关。陈硕老师称其为Object-base编程,通过对象来完成功能注入。拳拳到肉(陈老师原话)。原创 2014-07-27 22:50:52 · 1366 阅读 · 0 评论 -
学习window编程1
在学校一直做linux开发,工作做windowsk原创 2014-07-13 22:37:57 · 1293 阅读 · 6 评论 -
基于ZigBee和GSM模块的环境监控系统
这是我大二时的一个项目,原创 2014-09-28 21:39:00 · 3019 阅读 · 3 评论 -
QTabWidget+QToolBar实现浏览器标签页
直接上代码/********************************************************************* author 周翔* e-mail 604487178@qq.com* blog http://blog.csdn.net/zhx6044*************************************************原创 2013-07-11 10:00:14 · 7301 阅读 · 5 评论 -
引用计数实现
在看More Effective C++时就有引用计数,现在自己实现了下。完成计数的基类/**************************************************author:周翔*e-mail:604487178@qq.com*blog:http://blog.csdn.net/zhx6044***************************原创 2013-06-22 22:28:10 · 1455 阅读 · 0 评论 -
栈的顺序实现和链接实现
#ifndef STACK_HPP#define STACK_HPP#include #include "exceptions.hpp"template /** * @brief The Stack class 栈基类 */class Stack{public: Stack() {} virtual ~Stack(){} /** * @br原创 2013-05-09 12:30:06 · 1036 阅读 · 0 评论 -
平衡二叉树
二叉树的查找,插入和删除操作的时间与树的高度有关,如果树尽量的矮胖,那么时间就短,那就要是满二叉树,或者说满N叉树,对于一颗M个节点的满N叉树时间复杂度为,但是维护满叉树,难度是很大的。所以AVL树(平衡树)放宽了条件,允许左右子树的高度差在一定的范围之内,avl树平衡条件是左右子树高度相差不能为2,而不是满叉树左右子树高度相同。AVL是以提出它的两位苏联数学家的名字头字母命名的。一棵N个节点的A原创 2013-05-24 18:24:16 · 1077 阅读 · 0 评论 -
C++异常处理(一)
在程序的一般设计中,怎么判定一个方法适合按你预想的那样执行了,在C语言中,返回一个整数是常用的方法,比如一个-1,比如linux打开一个文件open,失败返回-1,大家如果都遵守还好,可是还是会出现返回0是失败的。Java中对于异常错误处理使用异常,异常是强制使用的,在C++中不是,你可以完全不使用,说实话我很好使用,有时基本都忘了,使用的最多的还是C的风格,这两个对于异常处理的风格没有孰优孰劣。原创 2013-05-25 08:45:29 · 868 阅读 · 0 评论 -
图-公交查询问题乱弹(一)
下面这图是本人乱涂鸦的只有3条线路的公交路线图 <!--p {margin-bottom:0.21cm}-->一号线 A-B-E-D-K二号线F-B-C-D-K-J三号线H-I-E-J-K-D保存这个数据结构使用图的变形很合适首先是一个所有路线的集合,一个元素包含两个标识,路线和第一个原创 2013-05-26 15:18:05 · 983 阅读 · 0 评论 -
C++对象原型
C++的对象在内存中是怎么表示的,数据成员和成员函数之间有什么关系,this指针到底是干嘛的。这里不考虑虚函数表一个对象内存中占的大小其实就是他的数据成员的大小 这是我用的例子 class T{public: T() {} void info() const { cout << "info\n"; } void print原创 2013-06-16 22:30:49 · 1144 阅读 · 0 评论 -
Qt mvc四
上次提到对student类属性的描述是侵入式的,这次介绍非侵入式的,其实我也就是借鉴了便准库中的traits,了解的同学应该都知道,不了解的可以查查。我定义了一个类模板,Members,对于类student模板提供了一个特化/**************************************************author:周翔*e-mail:604487178@q原创 2013-06-07 19:29:57 · 2567 阅读 · 4 评论 -
Qt元对象系统和模板机制的冲突
Qt元对象系统是对为了Qt对象类型和信号与槽机制引进的,Qt的工具包中有一个元对象编译器,它是为支持Qt元对象系统而产生一些额外C++代码,这些编码会和源码一起被标准的C++编译器编译,因为Qt的这一套标准是不支持的,但是可以实现,说白了就是在标准编译器编译前的一个预处理。C++的模板机制是代码重用,其实现在已经不只是这些。如果有兴趣可以了解一些C++的最新的研究方面,比如模板元编程,繁殖性编原创 2013-06-07 18:51:24 · 2217 阅读 · 1 评论 -
qwt学习一
学习这个东西方向对了,就对了一半今天我开始学习基于qt库的一个开源的绘制2维的统计图的库--qwt。我们画东西首先要有一个容器,不然都是徒劳,今天我们就介绍这个类--QwtPlot它继承自QFrame和QwtPlotDict,QFrame提供一个QWidget的框架,QwtPlotDict为QwtPlot管理在其中的plot items,就是绘制的项。在QwtPlot上我们可以绘制无限原创 2013-06-18 18:24:58 · 26595 阅读 · 12 评论 -
引用计数
C++中没有垃圾收集机制,但是C++提供了我们能够实现我们想要的一切的基础。下面我简单了实现了一个引用技术的类,没有什么设计可言,只是演示一下。引用计数将客户需要做的销毁对象的代码迁移到对象本身,对象在不被使用时即计数为0时自身实现销毁。/**************************************************author:周翔*e-mail:6044原创 2013-06-22 12:28:03 · 1443 阅读 · 0 评论 -
Qt HTTP请求同步调用
在Qt中,进行HTTP就行现在官方提倡使用QNetworkAccessManager,其和QNetworkRequest和QNetworkReply配合使用,来完成,其是只支持异步的操作。最近使用QML做些android的小程序,需要进行HTTPS的操作,开始是使用的JS中的XMLHttpRequest,其不能使用HTTPS,我很郁闷,那只有使用C++来完成,但是又发现只支持异步,但是我希望在进行网原创 2015-03-24 21:08:57 · 11629 阅读 · 2 评论 -
qml+opencv(一)
前言突然想起opencv,一直想做人脸识别,可是理论基础太水,只能慢慢来,去年学习了一会,然后公司让我去搞app和网络,就一直搁着,现在学习qml,突然想能不能在qml里面使用opencv,所以就有了这篇文章。QQuickItem和QObject在QML中,可视化的基础组件是Item,不可视化的就是QtObject,它们对应C++中的QQuickItem和QObject类,扩展QML组件一个继续基于原创 2015-04-13 20:39:27 · 6404 阅读 · 3 评论 -
C++中怎么对野指针进行防护
一直从事C++底层库的开发,这里以监听模式来示例野指针的防护。底层通知上层,一种方式是,底层提供一个监听接口类,上层实现,然后注册下来,一般是有注册就有反注册,可以把下层安全压在上层使用者,在释放这个监听接口类之前进行反注册,这个就太不明智,那么我们就需要基于框架设计能防护野指针破坏,这里我们提供一个Guard机制。 `Guard`翻译过来的意思就是`警卫`,顾名思义就是用来防护的。先看其实现:c原创 2015-11-14 10:36:25 · 1838 阅读 · 0 评论 -
Android系统input系统(1)
我们平台的build system移植于android,在android组件中,我们使用了Binder驱动,来实现进程间的交互,对于input系统,因为我们将android的java application framework换成了Qt,为了实现更好的图形渲染,主要是我们需要实现主从设备的显示屏公用,这样我们需要将从设备的surface传输到主设备的来实现不同设备间的surface合成,来实现主从原创 2016-03-05 19:47:40 · 4543 阅读 · 0 评论 -
C++11中多线程例子
C++11开始,自带线程相关的操作库。这里举个例子,以并发编程最经典的例子,生产者消费者的例子来示例在C++11使用标准库提高的线程库来进行并发编程。这里为了方便线程的使用,参考了android源码中对thread的封装。class Thread{public: Thread() : m_running(false) { } virtual ~Thr原创 2016-03-31 21:10:41 · 3556 阅读 · 0 评论 -
基于TCP协议的视频传输
这个程序是为了大二上学期一个设计作业,写的原创 2014-10-12 12:31:33 · 10117 阅读 · 12 评论 -
C++中实现自动注册的工厂
很长时间没有跟新博客了,不是博主懒,是因为博主再帮研究生妹子弄硕士论文,定位方面的,被imu,行人航迹,激光匹配各种虐,不说了,都是泪。Factory模式,在工程中多用了创建派生类实例,内部一般使用switch-case根据不同的key去创建不同的派生类对象。switch(Key) { case A: return new A; case Bw: r原创 2016-01-23 13:44:54 · 7437 阅读 · 2 评论 -
实现类似于Qt的Signal和Slot通讯机制
Signal和Slot机制其实qt提供的对象间通讯机制。实现细节思路实现类似与信号与槽的机制,无非就是做一些薄记工作,qt中通过虚函数和moc来实现。那我们怎么实现?我的思路是signal是一个对象,其他的slot将自己的回调注册进signal对象中,signal完成薄记工作。那么需要实现的细节归于一下几点。 1. 参数的提取与匹配。 2. slot容器的制作。 3. slot的调用。 参数原创 2015-05-08 20:40:23 · 2896 阅读 · 2 评论 -
基于C++11的事件驱动框架
闲来无事,系统捣鼓C++。之前在signal-slot中提到事件循环,不过那个实在写的太挫。现在写了一个说的过去的。项目地址: https://github.com/ZhouBox/moos.git下面简单的说明下。 task完成实现对事件循环的一个任务的封装。 task_policy实现了各种task的策略。 task_queue是事件队列 looper是一个事件循环。 moos_原创 2016-04-06 21:05:20 · 12339 阅读 · 2 评论 -
I2C总线协议
毕业设计中使用到了AT24C04器件,其是Ateml公司出品的,是一种低功耗CMOS串行EEPROM,其使用两线串行的总线和控制器进行通讯。其内部保存的数据在掉电的情况下可以有40年以上的有效期。其采用8 脚的DIP 封装,易于使用。简单来说,AT24C02是一款能在断电的情况下依然能够长时间存储数据的芯片。可以使用I2C协议总线与AT24C04进行交互。I2CI2C总线协议概论I2C总线是一种由数原创 2016-05-15 11:45:13 · 5234 阅读 · 0 评论 -
CC2530+74HC164矩阵键盘的设计
最近个大网盘都发出通知,用户的数据将会被清楚,其中就有金山快盘,上大学的时候用的金山,很多重要的资料在其中都保存了一份。现在将其全部下载了下来,然后发现了我的毕业论文,看了一遍,就有了这系类文章。今天将矩阵键盘的设计和编程。背景我的毕业设计是基于ZigBee网络的一个hub系统,协调器节点作为中枢,控制器和被控制器都连接在这个中枢上。控制器上使用矩阵键盘那就很平常了。CC2530的端口数比较小,这原创 2016-05-07 11:32:14 · 13634 阅读 · 0 评论 -
基于boost.asio的ECHO服务器
基于boost.asio的ECHO服务器前沿从大二开始就对服务器开发,感兴趣,从Qt的QTcpServer和QTcpSocket到使用linux的epoll。后来有因为工作搞了一个nginx和php做app后台,后来想找个游戏服务器方面的工作,可是人家嫌你没开发经验,当时我毕业还没一年,能有多少锤子经验。问我熟悉boost.asio库吗,我说知道,没用过,然后就没有然后啦。老老实实做嵌入式开发。ec原创 2015-08-29 20:11:16 · 1984 阅读 · 1 评论 -
基于boost.asio的echo服务器2
在多处理器普及的现在,服务器程序会充分使用计算机多核的能力,比如nginx的master-worker多进程模式,那么今天我们就在1的基础上来通过多线程来使用多核。 进程和线程数不是越多越好,一般不要超过CPU核数的2倍。io_service是asio的事件循环,那么多线程就是几个io_service在各自的线程运行,这里我们使用io_service_pool类管理他们。#define CPUS原创 2015-09-12 12:11:16 · 1231 阅读 · 0 评论 -
qml+opencv(二)
实现人脸检测。opencv提供了Haar分类器,其在data文件下还提供了训练的数据,所以实现这个不是很难。 我继承OpenCVaction,实现了人脸检测的算法。#ifndef OPENCVFACEDETECTACTION_H#define OPENCVFACEDETECTACTION_H#include "opencvaction.h"class OpenCVfaceDetectActi原创 2015-04-14 22:10:56 · 3397 阅读 · 1 评论 -
qml+opencv(三)人脸检测与识别
ccface介绍这个我闲的蛋疼无聊做的一个人脸检测和识别的小程序。环境Qt5+opencv2.4.9使用通过File菜单打开关闭摄像头ID填入标识,save保存select 识别检测save识别程序地址: https://git.oschina.net/zhouX/ccface.git原创 2015-05-11 21:15:19 · 4768 阅读 · 0 评论 -
基于epoll的聊天室程序
epoll相对于poll和select这两个多路复用的I/O模型更加的高效。epoll的函数很简单,麻烦的地方在于水平出发和边沿触发。 用张图来说明下 ET(边沿)只是在状态反转时触发,比如从不可读到可读。而LT(水平)就是如果可读,就会一直触发。所以在使用ET的时候要做一些额外的处理,比如可读的,一直把缓冲区读完,进入不可读状态,原创 2013-07-13 20:44:31 · 3956 阅读 · 0 评论 -
实现signal和slot机制(2)-跨线程投递
前言在1中,我们实现了一个基础的signal+slot的模块件调用机制,不过那个direct调用,在这篇中,我们将支持夸线程调用,即在对象的线程上下文中,调用对象的函数。对象线程绑定在qt中,有一个很重要的概念,对象线程绑定,即在每个对象实例时候,其保存其线程上下文信息,其中就有一个事件循环,跨线程的信号就是将这个一个task丢到这个事件循环中,在对象绑定的线程中完成slot响应。实现对slot调用原创 2015-06-04 21:08:27 · 3742 阅读 · 0 评论 -
epoll和input子系统实现input事件分发
前言在嵌入式开发中,按键和触摸板等输入系统很常见,其驱动文件位于/dev/input下,以event开头,后接数字。epoll是2.6内核引入的I/O多路复用的新的高效的接口,我在以前的博客中,使用其实现了一个聊天室服务器程序。这里我们使用其来监控input子系统事件。 在嵌入式软件开发中,小的程序,我们可以直接使用I/O接口来获得外部的时间输入,而如果对于一个大型的嵌入式软件系统,其会被很多地方原创 2015-05-21 23:16:54 · 2325 阅读 · 0 评论 -
Android添加一个Native Service
Native Service其实就是一个linux守护进程,提供一些服务,不过由于android的进程间通讯使用了Binder机制,那么我们就需要按照android的规则来实现我们的Native Service。客户端在请求service的服务时使用了一个具有相同接口的Proxy类。native service这具体实现这个接口,所以android提供了IInterface类,其是”base cla原创 2015-08-07 17:09:59 · 8336 阅读 · 1 评论 -
在android系统中添加hello程序
在android系统中添加hello程序标签(空格分隔): android遵循android系统的原则,我们添加一个hello程序,来说明怎么添加一个可执行问价到android系统中。 我们在frameworks/bask下新建一个hello文件夹,在里面新建一个main.cpp和Android.mk文件。 main.cpp文件#include "utils/RefBase.h"#includ原创 2015-08-04 18:07:15 · 999 阅读 · 0 评论