
c++编程
文章平均质量分 70
贰月十七
吾尝终日而思矣,不如须臾之所学也。吾尝跂而望矣,不如登高之博见也。……君子生非异也,善假于物也
展开
-
无缝世界网游服务器架构设计思路(下)
无缝世界网游服务器架构设计思路(下)上次写了《无缝世界网游服务器架构的设计思路》,这次是续篇,主要内容是两种架构的优缺点分析。从一组服务器的角度来看,一般来说,我们的服务器组(Cluster)内都会有登陆验证服务器(Login Server)、持久性数据服务器(DB及DB Proxy)、连接代理服务器(Gate Server、FEP Server、Client Proxy等)以及Auto Pa...原创 2019-01-11 19:36:14 · 590 阅读 · 0 评论 -
C++思维导视
C++知识大纲和思维导视1.C++知识大纲:2.C++思维导视:原创 2016-03-20 15:37:49 · 862 阅读 · 0 评论 -
链式储存结构-单链表
链式储存结构-单链表逻辑结构 单个结点由数据域与一个指针域相结合而成(如图1)。数据域中的数据类型可以是任意类型,比如说是int,float,double等。指针域中指针指向后继元素,即存放后继元素的物理储存地址。 一个单链表由头结点(其中包含头指针,其中的数据域可以不存放数据),表中结点,尾结点组成(如图2)。 头指针是单链表与外界的唯一接口,它指向单链原创 2014-11-04 19:45:50 · 1512 阅读 · 0 评论 -
单链表的一些见解
关于q->next=p->next和q=p->next的理解假令 q为结点1,p为结点2,即q的物理储存地址为00293590,q中指针域中保存地址为00293558,q中数据域为11即p的物理储存地址为00293558,q中指针域中保存地址为00293448,q中数据域为12q->next =p->next即q的物理储存原创 2014-11-04 19:43:45 · 515 阅读 · 0 评论 -
设计模式(三)装饰模式
设计模式(三)装饰模式 #include #include using namespace std;//人class Person { string m_strName;public: Person(string strName) { m_strName = strName; } Person(){} virtual v原创 2016-02-01 19:07:19 · 559 阅读 · 0 评论 -
避免僵尸进程
避免僵尸进程 while(1){ ret = wait(NULL);原创 2016-02-13 15:53:15 · 555 阅读 · 0 评论 -
守护进程
守护进程概念: 什么是守护进程? 守护进程是在后台运行不受控端控制的进程,通常情况下守护进程在系统启动时自动运行守护进程的名称通常以d结尾,比如sshd、xinetd、crond等。创建守护进程步骤: 1.调用fork(),创建新进程,它会是将来的守护进程 2.在父进程中调用exit,保原创 2016-02-07 21:47:26 · 746 阅读 · 0 评论 -
进程结束的五种方式
进程结束的五种方式1.exit ()2._exit ()3exit (): 是c语言库函数,执行时内部先调用进程终止处理程序(atexit(),先注册后执行原则),再进行I/O刷新,然后执行_exit (). _exit (): 是系统调用,执行时直接陷入内核状态.('\n',有刷新I/O缓冲区的作用;fflush原创 2016-02-07 13:20:51 · 1090 阅读 · 0 评论 -
调试之剑
跟踪调试:GDB gdb 是由 GNU 软件系统社区提供的调试器,同 gcc 配套组成了一套完整的开发环境,可移植性很好,支持非常多的体系结构并被移植到各种系统中(包括各种类 Unix 系统与 Windows 系统里的 MinGW 和 Cygwin )。此外,除了 C 语言之外,gcc/gdb 还支持包括 C++、Objective-C、Ada 和 Pascal 等各种语言后端的编译和调试。 gc原创 2015-12-26 20:57:33 · 2239 阅读 · 1 评论 -
c++优先级
c++优先级http://www.cppreference.com/operator_precedence.html PrecedenceOperatorDescriptionExampleAssociativity1()[]->.::++--Grouping operatorArray accessMembe原创 2016-01-10 14:55:27 · 543 阅读 · 0 评论 -
new delete memset不解之缘
new delete memset不解之缘跟new交了朋友就不能跟memset交朋友,不认delete老公要生气的。原创 2015-11-29 13:46:22 · 1117 阅读 · 0 评论 -
c++企业级接口框架(二)
c++企业级接口框架(二)SocketProtocol.h#ifndef _SOCKET_PROTOCOL_H_#define _SOCKET_PROTOCOL_H_/**说明:接口*/class SocketProtocol {public: virtual bool cltSocketInit () = 0; virtual bool cltSock原创 2016-01-23 19:54:31 · 2525 阅读 · 0 评论 -
c++和c混合编程
c++和c混合编程第一步:在C头文件的最顶端加上如下代码(__cplusplus只存在于C++编译器下)#ifdef __cplusplusextern "C" {#endif第二步:在C头文件的最尾部加入如下代码#ifdef __cplusplus}#endif原创 2015-11-08 09:45:25 · 692 阅读 · 0 评论 -
c++中多参数
c++中多参数#include #include "stdlib.h"#include "stdarg.h" //c标准函数库的头文件,主要的内容是让函数能接收可变数量参数using namespace std;/**说明:计算所有可变参数的和*/int sum(int count, ...) { //注意点,左边起必须起码有一个原创 2015-12-05 22:35:41 · 2813 阅读 · 0 评论 -
vim-我的利器
vim-我的利器安装步骤:1.curl https://j.mp/spf13-vim3 -L > spf13-vim.sh && sh spf13-vim.sh 2.作者jhnwsk的原话:If you run :h vundle it says that you can use :let g:vundle_default_git_prot原创 2016-05-25 09:24:31 · 618 阅读 · 0 评论 -
整型数据转二进制转字符方法(1)
#include #include using namespace std;struct BitFied{ unsigned char a1:1; unsigned char b1:1; unsigned char c1:1; unsigned char d1:1; unsigned char e1:1; un原创 2015-11-05 19:53:52 · 992 阅读 · 0 评论 -
无缝世界网游服务器架构设计思路(上)
无缝世界网游服务器架构设计思路(上)过去一年中,花了很多时间在考虑服务器架构设计方面的问题。看了大量文章、也研究了不少开源项目,眼界倒是开阔了不少,不过回过头来看,对网游架构设计方面的帮助却是不多。老外还是玩儿console game的多,MMO Games方面涉及的还是不如国内广泛。看看 Massively Multiplayer Games Development 1 & 2 这两本...原创 2019-01-11 19:31:35 · 599 阅读 · 0 评论 -
Linux下编译安装log4cxx
Linux下编译安装log4cxxlog4cxx的官方下载地址是http://logging.apache.org/log4cxx/index.html ,我用的是apache-log4cxx-0.10.0版本。为了编译它,还需要两个辅助库,apr,和apr-util,可以在这里下载http://apr.apache.org/download.cgi ,我用的版本分别是apr-1.5.0.tar.g原创 2017-12-02 23:50:53 · 938 阅读 · 0 评论 -
GCC 4.8及以上支持内存非法访问检查
gcc4.8及以上版本支持地址越界,野指针检查,只需要在编译时使用-fsanitize=address选项即可,当运行程序时如果访问非本程序申请的地址就会报错。 root@localhost:/home/ngos/practice> vi nullpoint.c 1 #include “stdio.h” 2 3 int main(int a转载 2017-07-28 18:47:26 · 1826 阅读 · 0 评论 -
剖析虚函数
剖析虚函数虚函数表对C++ 了解的人都应该知道虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。简称为V-Table。在这个表中,主是要一个类的虚函数的地址表,这张表解决了继承、覆盖的问题,保证其容真实反应实际的函数。这样,在有虚函数的类的实例中这个表被分配在了这个实例的内存中,所以,当我们用父类的指针来操作一个子类的时候,这张虚函数表就显得由为重要原创 2017-02-26 00:44:22 · 514 阅读 · 0 评论 -
浅拷贝与深拷贝
浅拷贝与深拷贝 在某些状况下,类内成员变量需要动态开辟堆内存,如果实行位拷贝,也就是把对象里的值完全复制给另一个对象,如A=B。这时,如果B中有一个成员变量指针已经申请了内存,那A中的那个成员变量也指向同一块内存。这就出现了问题:当B把内存释放了(如:析构),这时A内的指针就是野指针了,出现运行错误。 深拷贝和浅拷贝可以简单理解为:如果一个类拥有资源,当这个类的对象发生复制过程原创 2017-02-27 12:00:24 · 428 阅读 · 0 评论 -
现代编译过程
现代编译过程编译过程分为五步:扫描解析文件预处理工作 处理宏定义,不管是由-D参数指定,还是在源码内部通过#define,或者使用了标准库,扩展库中的宏,都会替换为定义的值。 命令:cpp a.c>a.i 输出的a.i就是预处理过的文件,包含了完整的内容。 由此可以得出,宏不是运行时的定义内容,也不是编译时的内容,而是预处理阶段就完成的。编译阶段: 将源代码(也就是预处理过的代码)编译原创 2017-02-26 23:07:48 · 483 阅读 · 0 评论 -
静态变量与类大小关系
静态变量与类大小关系 首先,类的大小是什么?确切的说,类只是一个类型定义,它是没有大小可言的。 用sizeof运算符对一个类型名操作,得到的是具有该类型实体的大小。如果Class A;A obj;那么sizeof(A)==sizeof(obj) 那么sizeof(A)的大小和成员的大小总和是什么关系呢,很简单,一个对象的大小大于等于所有非静态成员大小的总和。 为什么是大于等于而不是原创 2017-02-26 22:45:16 · 2347 阅读 · 0 评论 -
模板化vs模板特化vs模板偏特化
模板化vs模板特化vs模板偏特化 编译器在编译阶段进行匹配时,抉择顺序:模板偏特化>模板特化>模板化代码直观template <typename T>class CTemplate{public: CTemplate() { std::cout << "一般模板" << std::endl; }};//模板化template <>class原创 2017-03-02 00:12:37 · 711 阅读 · 0 评论 -
c++企业级接口框架(一)
c++企业级接口框架SocketProtocol.h#ifndef _SOCKET_PROTOCOL_H_#define _SOCKET_PROTOCOL_H_/**说明:接口*/class SocketProtocol {public: virtual bool cltSocketInit () = 0; virtual bool cltSocketSen原创 2016-01-22 21:00:59 · 3466 阅读 · 5 评论 -
宏定义的妙用
宏定义的妙用#define ToChar(x) #@x //x加上''#define Conn(x, y) x##y //连接x,y#define ToString(x) #x //x加上""#include #include using namespace std;int main(){ /*Conn(x, y)*/ int iNum1 = Conn原创 2015-11-07 21:32:47 · 1205 阅读 · 0 评论 -
多态的深层理解
多态的深层理解多态的实现效果: 多态:同样的调用语句有不同的表现形式,也就是说里面具体实现的代码不同。多态实现的三个条件: 有继承、virtual重写、父类指针指向子类指针。 多态的理论基础: 动态联编: 编译程序在编译阶段并不能确切地知道将要调用的函数,只有在程序执行时才能确定将要调用的函数,为此原创 2016-01-13 13:36:18 · 1584 阅读 · 0 评论 -
整型数据转二进制转字符方法(3)
整型数据转二进制转字符方法(3)int get_10(const unsigned char *strValue){ int a = 0; for(int i =0; i< 4; i++){ a += (strValue[i]&0xff) << (24-8*i); } return a; } unsigned ch原创 2016-05-19 11:09:35 · 564 阅读 · 0 评论 -
整型数据转二进制转字符方法(2)
整型转二进制型转字符型 #include #include using namespace std;struct BitFied{ unsigned char a1:1; unsigned char b1:1; unsigned char c1:1; unsigned char d1:1; unsigned char e1:1; uns原创 2015-11-05 20:04:55 · 1517 阅读 · 0 评论 -
c++多重继承
c++多重继承二义性问题: 一般说来,在派生类中对基类成员的访问应该是唯一的,但是,由于多继承情况下,可能造成对基类中某成员的访问出现了不唯一的情况,则称为对基类成员访问的二义性问题。 通常再实际的是使用情况中,多重继承主要是用来进行接口的使用的。相当于java中的interface关键子字。实际例子:#include using namesp原创 2016-01-22 15:52:13 · 1222 阅读 · 1 评论 -
字符转二进制_C++实现
字符转二进制_C++实现原创 2015-10-09 12:42:16 · 9110 阅读 · 1 评论 -
将多个int 或其他类型的数据 拼接在一起并转成string类型
int iYear = 2015; int iMonth = 2; int iDay = 10; int iHour = 12; int iMinute = 31; char chTime[30]; string strTime; int iLength = 0; iLength += sprintf(chTime,"%d",iYear); *(&chTime[iLength]原创 2015-02-10 17:19:45 · 2371 阅读 · 0 评论 -
谈谈8年C++面向对象设计的经验体会 转自鸡啄米
1. C++面向对象程序设计的重要概念早期革命影片里有这样一个角色,他说:“我是党代表,我代表党,我就是党。”后来他给同志们带来了灾难。会用C++的程序员一定懂得面向对象程序设计吗?不会用C++的程序员一定不懂得面向对象程序设计吗?两者都未必。就象坏蛋入党后未必能成为好人,好人不入党未必变成坏蛋那样。我不怕触犯众怒地说句大话:“C++没有高手,C 语言才有高转载 2015-02-05 12:25:39 · 574 阅读 · 0 评论 -
vector在c++环境下的用法
在c++中,vector是一个十分有用的容器,下面对这个容器做一下总结。1 基本操作(1)头文件#include.(2)创建vector对象,vector vec;(3)尾部插入数字:vec.push_back(a);(4)使用下标访问元素,cout(5)使用迭代器访问元素.vectorint>::iterator it;for(it=ve转载 2014-12-09 16:06:24 · 600 阅读 · 0 评论 -
扩充数组方案实现
原创 2015-01-31 01:24:51 · 609 阅读 · 0 评论 -
函数中有多个类型的返回值 解决
原创 2015-01-31 01:10:38 · 1607 阅读 · 0 评论 -
CString 转换
sscanf,sscanf_s及其相关用法#include 定义函数 int sscanf (const char *str,const char * format,........);函数说明 sscanf()会将参数str的字符串根据参数format字符串来转换并格式化数据。格式转换形式请参考scanf()。转换后的结果存于对应的参数内。返转载 2015-01-26 21:40:12 · 569 阅读 · 0 评论 -
数组的理解
数组定义语法Typedef int(abc)[10];关于数组的一些理解Intabc[100] ;1.//abc指的是数组abc的首个数组元素的地址所指向的内容2.//&abc取的是整个数组的地址3.//abc = 0x2212该语句是错误的,abc为常量指针变量无法修改。原创 2014-11-08 13:15:29 · 702 阅读 · 0 评论 -
void的一些规定
规则一如果函数没有返回值,那么应声明为void类型在C语言中,凡不加返回值类型限定的函数,就会被编译器作为返回整型值处理。但是许多程序员却误以为其为void类型。例如:add ( int a, int b ){return a + b;}int main(int argc, char* argv[]){printf ( "2 + 3 = %d", add ( 2转载 2014-11-16 22:11:33 · 914 阅读 · 0 评论 -
C++特有类型转换整理
string example = "abc";char *x;x = (char *)example;x = const example原创 2014-11-16 18:58:42 · 531 阅读 · 0 评论