C++编程思想
UsherYue
进入研发行业10年,曾任职与多家创业公司,负责核心研发工作,团队建设管理工作。
展开
-
Node.js插件编写(3)-普通函数和回调函数的实现
前两节我们讲述了node插件的基础入门,以及需要的环境, 这一节我们来尝试写一个复杂一点的插件, 通过Node-Api 实现插件导出普通函数和回调函数。原创 2021-12-28 14:05:21 · 751 阅读 · 0 评论 -
利用C/C++扩展php语言实现 Usher_GetHostIP无参函数
PHP程序员需要略会C也是必要的,不管从业务角度还是 专业角度,因为C是PHP的母语。并且我们一般不会用原生PHP来处理大批量业务逻辑,这个时候我们需要扩展。曾经有一个笑话 是一个php程序员在群里喊了一句 "PHP是世界上最牛逼的语言,没有之一!" 然后 所有人笑了。笑话归笑话,但是PHP从语言本质来说的确是一门不错的语言,如果灵活的运用,他不应该成为阻碍我们前进的瓶颈,反而是一把利器。如果运用得当PHP真的是个不错的选择。语言本身没界限高低之分,只有思想运用之别。PHP程序原创 2015-02-04 00:51:24 · 3011 阅读 · 1 评论 -
Linux下C编程-----文件操作(1) 通过系统调用简单操作标准输入、标准输出、标准错误
Linux的 C系统调用操作 ,下面我们就来练习下 简单的系统调用操作read系统调用测试/************************************************************************* > File Name: read.c > Author: > Mail: > Created Time: Tue 10 Feb 2015原创 2015-02-10 21:57:18 · 4610 阅读 · 1 评论 -
Linux下C编程-----IO/文件操作/内存映射 实现简单记录存储(3)
利用linux下的文件内存映射可以实现进程共享数据,我们可以把一个文件映射到虚拟内存中使多个进程进行共享,到这里我们大概能想到他能应用到的领域 是很广泛的 主要涉及到 mmap munmap msync 三个函数的应用下面贴代码 下面一段代码是为文件建立一个简单的记录存储,并且通过内存映射修改文件内容/*******************************原创 2015-02-13 21:15:10 · 3351 阅读 · 0 评论 -
Linux C程序设计系列之 练习系统调用文件IO、内存映射程序 编写ls程序
文章目录 1.1 Linxu C系统调用例子代码 1.2 模拟Linux系统ls 程序 显示树形结构目录 1.3内存共享实现简单的数据共享 下面是 1.2程序截图下面是1.3程序截图原创 2015-02-13 21:45:31 · 1369 阅读 · 0 评论 -
Linux下C编程-----IO/文件操作 模拟linux ls程序显示文件系统树形结构(2)
Linux下的IO/文件操作练习,知识虽然简单 但是往往基础容易被忽略,偶尔的练习是有必要的。 练习printf/************************************************************************* > File Name: printf.c > Author: > Mail: > Created Ti原创 2015-02-13 16:30:43 · 2480 阅读 · 0 评论 -
Linux下C程序设计(4)----操作环境变量 、程序传递参数getopt getopt_long操作、获取时间
通过命令传递参数查看环境变量 /************************************************************************* > File Name: env.c > Author: > Mail: > Created Time: Tue 24 Feb 2015 10:42:21 PM PST ****************原创 2015-02-26 22:00:43 · 1626 阅读 · 0 评论 -
C++运算符重载
C++中预定义的运算符的操作对象只能是基本数据类型,实际上,对于很多用户自定义类型,也需要有类似的运算操作。例如: class complex { public: complex(double r=0.0,double I=0.0){real=r;imag=I;} void display(); private: double real; dou转载 2015-04-13 14:12:40 · 698 阅读 · 0 评论 -
C++运算符重载简单练习 写一个Integer包装类
// Operator.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include using namespace std;class Integer{public: //explicit如果添加explicit就不能进行隐式构造 //隐式构造不会导致拷贝构造函数调用 Integer(int num):m_num原创 2015-04-13 15:57:42 · 2828 阅读 · 0 评论 -
C++指向类成员的指针的使用(详细介绍)
1.首先普通函数指针不能被赋值为成员函数的地址,即使返回类型和参数完全匹配。例如:下面是的pfi是一个普通函数指针,它没有参数,返回类型为int: int (*pfi)();若有两个全局函数,HeightIs()和WidthIs(): int HeightIs(); int WidthIs();则下面的的赋值操作是合法的: pfi = HeightIs(); pfi =转载 2015-04-15 09:17:10 · 3749 阅读 · 0 评论 -
C++实现一个线程安全的单例工厂
我们见到经常有人用 static 局部对象的方式实现了类似单例模式,最近发现一篇文章明确写明 编译器在处理 static局部变量的时候 并不是线程安全的 !!!http://blogs.msdn.com/b/oldnewthing/archive/2004/03/08/85901.aspx 于是实现了一个单例工厂 并且是线程安全的#ifndef SINGLETONFACTORY_H#原创 2015-11-07 19:56:22 · 2495 阅读 · 0 评论 -
算法有序数组合并---在空间足够的情况下,进行O(n)的合并 并且移动次数最小
最近看一本书上有一个面试题, 原题目是 有两个递增数组 A1 A2, A1的内存空间足够长, 现在要求合并 A2到A1,并且要求移动次数最小 ,面试的时候 我们尽量要以 最高效的方式完成 ,下面是此题 O(n)解法。void ReplaceCharInEnoughMemory(char*pStr){ if(pStr==0) return ; //计算空格原创 2015-11-11 14:57:33 · 1878 阅读 · 0 评论 -
关于有序二维矩阵查找和字符串替换的两道算法题
最近看一本书上写到的两个面试题 于是实现了一下 感觉思路很好,大牛略过 :1、对于一个二维矩阵,从左到右 从上到下 都是递增的,如何判断一个值是否在矩阵内部?(C实现 实现复杂度 O(n))bool FindInTwoDimensionalMatrix(int*pMatrix,int iRows,int iCols,int iFindVal){ bool bFind=false ;原创 2015-11-11 10:45:36 · 1512 阅读 · 0 评论 -
c/c++ static关键字详解
静态变量作用范围在一个文件内,程序开始时分配空间,结束时释放空间,默认初始化为0,使用时可以改变其值。 静态变量或静态函数只有本文件内的代码才能访问它,它的名字在其它文件中不可见。用法1:函数内部声明的static变量,可作为对象间的一种通信机制 如果一局部变量被声明为static,那么将只有唯一的一个静态分配的对象,它被用于在该函数的所有调用中表示这个变量。这个对象将只在执行线程第一转载 2016-11-16 12:57:54 · 412 阅读 · 0 评论 -
菜鸟学算法--简单的交换和最大公约数算法入门篇
工作之后我们大部分的时间实在研究如何如何学习一门语言 如何如何掌握一门技术,但是作为编程的本质 数据结构和算法 我们慢慢的忽略了 。工作后的很多程序员真的没有大学生一样的时间 去静下心来去增加自己的底蕴,这是我深有体会的事情当然我这里指的是和我有累死感觉的人。学习是一个过程,从简入繁 一贯如此,记录下来只为 记录自己的点点滴滴。#include "stdafx.h"#include原创 2015-01-31 14:15:36 · 1387 阅读 · 1 评论 -
菜鸟学算法----改进后的欧几里得算法
对于正整数 a和b 利用欧几里得算法可以得出 一个最大公因数 , 改进后的算法满足 最大公因数 q=xa+yb ;那么我们如何求出 a和b呢 。书上是这么写的 那么我们用代码把他实现出来, 向大家推荐一本书《The Art Of Computer.Programmer》 第一篇的数学部分 真心的枯燥 我选择的方式 是 适当的囫囵吞枣 对于这一样 ,但是对于其中讲述的算法原创 2015-01-31 16:25:13 · 1437 阅读 · 0 评论 -
#ifdef预编译指令详解
这几个宏是为了进行条件编译。一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”。有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。 条件编译命令最常见的形式为: #ifdef 标识符 程序段1 #else 程序段转载 2011-12-22 08:09:34 · 4756 阅读 · 0 评论 -
利用预编译指令防止代码重复编译
看下面一段代码 #include "test.h" //看到这句我们重复了 三次 按照我们以往的编写 我们可能认为 他会出现变量函数 等重复定义的错误 在一个文件中这样写显然是不好 我这里是做演示 因为我们在大型项目开发中很有可能的重复包含 同一个头文件 为了防止错误的发生我们要再头文件中利用#idndef #ifdef 等预编译指令 来处理代码 #ifd原创 2011-12-22 08:34:00 · 2567 阅读 · 2 评论 -
C++编程思想3-利用C++进行文件操作封装C函数
我们知道在C语言中许多文件操作的函数 很零散,在使用的时候不得不四处查找 ,我们是否能向C++中 的 CFile类等一样封装我们自己的文件操作呢?当然可以,我们这里我封装的是 C语言的文件操作函数 。实际上我们可以直接封装win32的API 函数 利用文件句柄进行文件操作,MFC的CFile类封装的就是 WIN32的API ,这里我只做测试用C来实现封装类File ,下面的File类可以实现原创 2011-12-30 11:39:45 · 4120 阅读 · 2 评论 -
C++中利用输入输入流进行一行输入
我们在使用istream类的对象cin进行一行输入的时候 往往遇到N多问题 比如我这样做char buf [100] ;cin>>buf ;cout这时候如果我们输入了 ddd ddd 那么只会输出 前三个ddd ,从而达不到我们预期的效果 这是因为流的设计是以空字符来结束提取的 ,空格是空字符 所以后面三个d就没有提取到buf中。 istream提原创 2011-12-30 12:29:49 · 3678 阅读 · 0 评论 -
c++编程思想2 --友元存储控制
友元friend在c++中的应用 我们知道在c++的类访问权限中,private和 protected在类外面进行访问的时候 会因为权限而不能访问 ,友元就解决了这个问题 。可以这样理解,他为外部的 函数 或者类 进行了 访问授权,其实这已经超出OOP的范畴,但是对于C++而言是以实用为主,所以说C++并不是完全面向对象的语言 C++这一特性就破坏的C++的安全性 。我们要使用友原创 2011-12-29 20:20:26 · 919 阅读 · 0 评论 -
java与c++中的对象序列化 分析。
有时候我们在开发项目的时候,对于数据的保存 我们通常是直接将数据保存到磁盘上面 ,但是这样操作起来非常的不方便 ,尤其是在大型的项目开发中。 对象的序列化可以将对象以数据的形式存储到文件中;反之我们也可以从文件中加载一个对象 ,也叫反序列化。 对于多个数据的操作封装在一起,写入文件,在反序列化的时候我们只需要读取这个对象就可以了 ,我么就不必关心内部数据和方法了 。因为所有数据都包原创 2012-04-06 13:09:23 · 3456 阅读 · 1 评论 -
C++面试经典题.......好紧张哦 要面试了
面试题7:一个指针可以是volatile吗可以,因为指针和普通变量一样,有时也有变化程序的不可控性。常见例:子中断服务子程序修改一个指向一个buffer的指针时,必须用volatile来修饰这个指针。说明:指针是一种普通的变量,从访问上没有什么不同于其他变量的特性。其保存的数值是个整型数据,和整型变量不同的是,这个整型数据指向的是一段内存地址。面试题8:a和&a有什么区别原创 2012-04-18 23:53:36 · 1787 阅读 · 0 评论 -
看懂下面C++代码才说你理解了C++多态虚函数!
#include using namespace std ;class Father{private : virtual void Say() //只有添加了virtual 关键字声明才会产生虚函数表 虚函数表在编译的时候确定 virtual是实现多态的关键 { cout } virtual void Run() { cout }};原创 2013-06-26 10:22:25 · 1991 阅读 · 2 评论 -
Boost Build
Window XP + Visual Studio 2008获取Boost库源码我们可以从http://www.boost.org/ 上获取boost的源代码。当前最新版本为1.45.0。解压到指定目录例如:D:/Program Files/boost/目录下获取bjam一种方式:从http://sourceforge.net/projects/boost/files/bo转载 2013-06-27 15:22:44 · 2723 阅读 · 0 评论 -
PRId64正确使用来保证跨平台
int64_t用来表示64位整数,在32位系统中是long long int,在64位系统中是long int,所以打印int64_t的格式化方法是:[cpp] view plaincopyprintf("%ld", value); // 64bit OS printf("%lld", value); // 32bit OS转载 2014-12-17 10:12:26 · 4174 阅读 · 0 评论 -
windows下VC界面 DIY系列1----写给想要写界面的C++程序员的话
很早就想写关于C++ UI开发的一系列博文,博客专栏刚审核通过,就马上开始刷博文,不能辜负自己的一番热血,我并不是写界面的高手,只想通过写博文提高我自己的技术积累,也顺便帮助大家解决界面开发的瓶颈。能来到这里看我写文章,第一说明你是windows下开发的程序员!第二你对漂亮软件界面开发感兴趣!第三或许你也像我当初一样对C++软件界面开发 无所适从!或许我写的不专业,但是我只想让原创 2014-12-18 17:17:40 · 18684 阅读 · 10 评论 -
转载 关于多线程MT和MD的区别。
这段时间司在招实习生,而不管是远程的电话面试或者是实际现场面试中领导都喜欢问你这个问题,但是可惜的是能很好答上来的人很少。后来发现不管是应届的实习生,甚至有些实际参加工作几年的人也未必真的了解这个问题。今天想写一篇详解,希望对广大程序员有一定的帮助。区别1:全局堆句柄不一样。 网上有一个说法,就是一个线程一个栈,一个模块一个堆。前者很容易有理解,每个线程创建的时候在CreateThread转载 2014-12-19 13:28:14 · 2179 阅读 · 0 评论 -
Nginx源码分析1--------编写Nginx扩展模块
近日来申请通过CSDN准专家,为了顺利在六个月后升级为认证专家,并对得起这个勋章,我感觉 不能松懈博客的更新频率以及质量了。C/C++ windows下的开发是我相对来说做的比较多的地方,对于Linux下的服务器开发 等等也算是半路出家,恰逢近来在研究分布式存储,涉及到了 Nginx 扩展开发以及配置,查阅了好多的资料发现Nginx配置部署起来相当的容易,但是源代码是真的晦涩难懂,经常会看的我原创 2015-01-28 23:34:39 · 5241 阅读 · 0 评论 -
C++编程思想1
学了好久的 C++了 发现自己对于C/C++还是没有深入的了解 于是 咬咬牙啃起了 C++编程思想 希望能有所感悟 。。我以前是直接学C++的对于C不是很了解,然而又是在VC下 学习 所以 没有好好的 去学习 标准C++,直到我 看起C++编程思想 我发现真应该从头再学一遍了 。。。 1、定义的声明的区别 :声明是 声明了标示符的存在 并没有为 其分配空间 ,而定义 是为原创 2011-12-22 06:27:06 · 2206 阅读 · 3 评论