C++
文章平均质量分 71
pilqc2009
这个作者很懒,什么都没留下…
展开
-
C++ primer 读书笔记之构造函数初始化列表
有些成员必须在构造函数初始化列表中进行初始化。对于这样的成员,在构造函数函数体中对他们赋值不起作用。没有默认构造函数的类类型成员,以及const 或引用类型的成员。不管是那种类型,都必须在构造函数初始化列表中进行初始化。可以初始化const对象或引用类型的对象。但不能对他们进行赋值。在开始执行构造函数的函数体之前,要完成初始化。初始化const或引用类型数据成员的唯一机会是构造函数初始原创 2013-05-27 22:47:34 · 501 阅读 · 0 评论 -
Boost::filesystem directory_iterator迭代器
最方便的一个功能是遍历path里的所有内容。directory_iterator。 path p; directory_iterator(p)就是迭代器的起点,无参数的directory_iterator()就是迭代器的终点。 获取目录下的所有文件名#include namespace fs = boost::filesys原创 2014-12-23 23:06:37 · 14995 阅读 · 0 评论 -
面向对象的设计原则
http://www.cnblogs.com/cavingdeep/archive/2004/10/28/208956.htmlhttp://ce.sysu.edu.cn/hope2008/Education/ShowArticle.asp?ArticleID=8858转载 2015-01-14 21:38:02 · 330 阅读 · 0 评论 -
如何判断两个单向链表是否有相交,并找出交点
判断两个链表是否相交:(假设两个链表都没有环)1、判断第一个链表的每个节点是否在第二个链表中2、把第二个链表连接到第一个后面,判断得到的链表是否有环,有环则相交3、先遍历第一个链表,记住最后一个节点,再遍历第二个链表,得到最后一个节点时和第一个链表的最后一个节点做比较,如果相同,则相交如何判断一个单链表是有环的?(注意不能用标志位,最多只能用两个额外指针)一种O(n)的办法转载 2015-01-14 22:07:20 · 540 阅读 · 0 评论 -
链表的操作
#include using namespace std;typedef int T;class List{struct Node{T data;Node* next;Node(const T& n, Node* next=NULL): data(n),next(next){}};Node* head;//头指针,不是节点,但指向第一个节点i原创 2014-12-10 20:47:07 · 326 阅读 · 0 评论 -
linux下C++开发工具
在linux下,开发工具被切割成一个个独立的小工具。各自处理不同的问题。例如,编辑器(emacs, vim)用来进行编辑程序的,调试器(gdb)用来调试程序,编译器(GCC)用来编译和链接程序的,性能分析工具(gcov, gprof)用来优化程序的,文档生成器(doxygen)用来生成文档的。同时,还有一些系统工具和系统知识,我们是很有必要了解的:程序自动化机制 m转载 2014-12-28 16:39:32 · 515 阅读 · 0 评论 -
为什么类的定义中不能包含其自身类型,但是能包含其自身的指针或引用类型
一个类可以只有声明没有定义,如:class Simple ; //没有{}部分被视为声明。 注意:class Simple{} ;这个是定义,只不过类是空的而已。只要包含{}就算定义。 对于只有声明而没有定义的类,只能声明它的指针类型或引用类型,不能直接声明其对象类型。class Simple ;void main(void){ Simpl转载 2015-03-25 08:34:31 · 315 阅读 · 0 评论 -
c++面试题
2015.1.14预处理 const 和 sizeof12345678910111213141516某32位系统下, C++程序,计算sizeof 的值char str[] = “http://www.ibeg原创 2015-01-14 21:35:06 · 408 阅读 · 0 评论 -
有符号数和无符号数间的比较
cout-2)cout-2)cout-2.)这个问题测试是否懂得C语言中的整数自动转换原则,有些开发者懂得极少这些东西。当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。因此,从这个意义上讲,无符号数的运算优先级要高于有符号数,这一点对于应当频繁用到无符号数据类型的嵌入式系统来说是丰常重要的。 首先进行一个实验,分别定义一个signed int型转载 2015-03-23 16:45:11 · 494 阅读 · 0 评论 -
关于网络字节序和主机字节序
什么是字节序?是指整数在内存中保存的顺序。 字节序有两种: a.Little endinan 低位存储在内存的低地址,高位存储在内存的高地址; b.Big endian 高位存储在内存的低地址,低位存储在内存的高地址;原创 2014-10-20 20:53:24 · 285 阅读 · 0 评论 -
C++中const用法总结
1. const修饰普通变量和指针const修饰变量,一般有两种写法:const TYPE value;TYPE const value;这两种写法在本质上是一样的。它的含义是:const修饰的类型为TYPE的变量value是不可变的。对于一个非指针的类型TYPE,无论怎么写,都是一个含义,即value只不可变。例如:const int nV转载 2015-03-31 22:32:38 · 288 阅读 · 0 评论 -
C/C++ 字符指针、字符数组用法
字符指针变量和字符数组都可以处理字符、字符串,但是两者却有着本质的区别。1、字符数组初始化及赋值char c_a[] = {" Hello, Buddy!"};//正确char c_a[] = {'a','b'};//正确char c_a[] = "Hello, Buddy!";//正确char c_a[11];c_a = "Hello, Buddy!"转载 2015-04-22 22:07:39 · 530 阅读 · 0 评论 -
boost中的shared_ptr
struct SData{ int main_type; int sub_type;};typedef boost::shared_ptr TData;typedef boost::shared_ptr TTData;TData data_t(new SData);其中,data_t存放的是结构体的指针。可以直接操作结构体原创 2015-04-15 07:54:53 · 396 阅读 · 0 评论 -
C++Primer Plus读书笔记 9.2.1作用域和链接
作用域(scope)描述了名称在文件的多大范围可见。例如,函数定义的名称可在该函数中使用,但不能在其他函数中使用;而在文件中的函数定义之前的定义的变量则可在所有函数中使用。c++变量作用域有多种。作用域为局部的变量只在定义它的代码块中可用。代码块是由花括号括起来的一系列语句。例如函数体就是代码块。作用域为全局(也叫文件作用域)的变量在定义位置到文件结尾都可用。自动变量的原创 2015-04-16 22:54:52 · 303 阅读 · 0 评论 -
如果想在main函数之前或main函数之后做一些工作
如果想在main函数之前或main函数之后做一些工作,可以用全局对象的构造函数和析构函数做一些事情。对象本身占用的内存空间会在超出作用域范围时或者delete时自动释放,如果对象还额外的分配了资源,可以再析构函数中释放哪些资源。如果要禁止自动用匿名对象实现类型转换,可以用explicit修饰构造函数。零初始化: 类型名(),对于基本类型而言是数值0,对于类原创 2015-07-03 08:40:59 · 314 阅读 · 0 评论 -
为什么使用指针比使用对象本身更好?
问题:为什么使用指针比使用对象本身更好?我是一名Java程序员,最近开始学习使用C++中的对象。有个问题我一直觉得很困惑:那就是为什么人们更喜欢使用指向对象的指针而不是对象本身。比如:这样声明:Object *myObject = new Object;而不是:Object myObject;使用函数的时候也是如此,假设有个函数为testFunc(),使用时可以这样转载 2016-01-17 08:56:24 · 247 阅读 · 0 评论 -
类对象和类指针的区别
如下程序: #include #include using namespace std; class Student { public: static int number; string name; public: Student() { } void set(string str) {转载 2016-01-17 09:18:28 · 306 阅读 · 0 评论 -
单链表的C++实现(采用模板类)
采用模板类实现的好处是,不用拘泥于特定的数据类型。就像活字印刷术,制定好模板,就可以批量印刷,比手抄要强多少倍!此处不具体介绍泛型编程,还是着重叙述链表的定义和相关操作。 链表结构定义定义单链表的结构可以有4方式。如代码所示。本文采用的是第4种结构类型/*********************************************转载 2016-02-03 15:21:38 · 642 阅读 · 0 评论 -
析构函数定义为虚函数原因
转自http://hi.baidu.com/wangruiy01/blog/item/867552d0de8bdc339a502721.html先看下面一段程序:#include using namespace std;class Person{public:virtual ~Person() //加了virtual,讲转载 2015-01-13 16:55:37 · 411 阅读 · 0 评论 -
ssh 登录出现的几种错误以及解决办法
首先、确保server端的ssh服务是开的(service shhd start)然后在client端输入: ssh usrname@serverip (远程登录)scp filename usrname@serverip:/URL (远程传输)常出现的问题:问题一ssh登录的时候链接端口失败提示(1):# ssh 192.1转载 2015-01-10 20:58:18 · 2123 阅读 · 0 评论 -
((*strDest++=*strSrc++)!='\0') 的理解
((*strDest++=*strSrc++)!='\0') 对于这种组合表达式,在分析的时候我们应该抓住两个关键的概念:优先级(Precedence)和关联性(Associativity)。((*strDest++=*strSrc++)!='\0'); 的理解 ((*strDest++=*strSrc++)!='\0'); 哪儿前辈可以解释下里转载 2015-01-06 21:41:30 · 554 阅读 · 0 评论 -
typedef函数指针的用法(C++)
typedef int (*PF) (const char *, const char *); 这个声明引入了 PF类型作为函数指针的同义字,该函数有两个 const char *类型的参数以及一个 int类型的返回值。简单的函数指针的用法(2)先来看一个Hello World程序:int main(int argc,char* argv[]){原创 2014-03-11 16:45:49 · 613 阅读 · 0 评论 -
c++ 函数对象
函数对象实质上是一个实现了operator()--括号操作符重载--的类。它与函数指针用法一样,但是它有一个优点,函数指针不可以传递附加数据过去,但是在函数对象中,我们可以传递附加数据过去。 先讲解下运算符重载吧,对于运算符函数我们有两种定义方式,1,如果此函数是属于一个类的成员函数,那么我们是这么定义的:参考ostream & operator我们可以通过这样的形式来调用:c转载 2014-03-13 09:55:30 · 389 阅读 · 0 评论 -
C++回调函数
1. 何为回调(callback)原创 2014-09-22 23:31:27 · 367 阅读 · 0 评论 -
变量声明和定义的区别
变量声明和定义的区别我们在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事,下面我就简单的把他们的区别介绍如下:(望我的指点对你受益)变量的声明有两种情况:1、一种是需要建立存储空间的。例如:int a 在声明的时候就已经建立了存储空间。2、另一种是不需要建立存储空间的。 例如:extern in转载 2014-09-16 21:34:43 · 321 阅读 · 0 评论 -
INI配置文件
INI文件的结构: ;注释 [小节名] 关键字=值 ...原创 2014-10-22 20:57:28 · 564 阅读 · 0 评论 -
C++命名空间通俗的解释
using namespace std 这句的意思是 使用命名空间 std 比如 杭州有一个西湖 潮州也有个西湖 如果你只说 西湖 ,可能别人就不知道你是说那里的西湖 如果你说 杭州的西湖, 别人就知道你是说杭州的西湖 这里的杭州就好像是使用 using namespace std ; 如果使用这个 就不用 std::cout std::cin 就可以使用 cout cin原创 2014-09-28 23:32:00 · 624 阅读 · 0 评论 -
#if !defined()#define
#if !defined()#define转载 2014-10-08 21:37:38 · 750 阅读 · 0 评论 -
预处理——如何避免对同一头文件的多次include
在同一个项目中可能会出现对同一个头文件include多次的情况。例如:在a.h文件中include了stdio.h,在b.c中include了stdio.h、a.h。 如果没有做适当的处理,编译器将认为程序对某些宏、结构等进行了重复定义。 使用条件编译(ifndef/define/endif)可以避免这种情况。 条件指示符#ifndef检查预编译常量在前面是否已经被定义。如转载 2014-10-08 21:54:21 · 1047 阅读 · 0 评论 -
作用域
C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域。原创 2014-10-09 21:40:21 · 436 阅读 · 0 评论 -
Linux网络编程之多播
1.概念单播是用于两个主机之间传送数据,广播是一个主机对局域网内的所有主机发送数据。而多播,又称为组播,它是对一组特定的主机通信。将网络上同一类型 业务逻辑上分组,只和组内的成员通信,其它主机没有加入组则不能通信。与单播相同的是,组播允许在Internet上通信,而广播只是同一局域网内的主机 通信。组播地址是特定的,D类地址用于组播,即244.0.0.0到239.255.255.255.转载 2014-10-13 22:33:46 · 367 阅读 · 0 评论 -
c++多个源文件共用一个全局变量(extern 的用法)
例子:头文件:state.h 源文件:state.cpp 其它源文件:t1.cpp t2.cpp t3.cpp, 这些源文件都包含头文件state.h。需要定义一个全局变量供这些源文件中使用:方法如下1、在 state.h声明全局变量: extern int a;2、在state.cpp中定义该全局变量:int a = 10;转载 2014-10-31 08:54:19 · 1135 阅读 · 0 评论 -
va_start和va_end使用详解
1.在C中,当我们无法列出传递函数的所有实参的类型和数目时,可以用省略号指定参数表void foo(...);void foo(parm_list,...);这种方式和我们以前认识的不大一样,但我们要记住这是C中一种传参的形式,在后面我们就会用到它。原创 2014-10-15 21:06:57 · 367 阅读 · 0 评论 -
深入探讨C++中的引用
一、引用简介 引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。 引用的声明方法:类型标识符 &引用名=目标变量名; 【例1】:int a; int &ra=a; //定义引用ra,它是变量a的引用,即别名 说明: (1)&在此不是求地址运算,而是起标识作用。 (2)类型标识符是指目标变量的类型。 (3)声明引用时,必须同时对其进行转载 2014-11-03 10:21:14 · 247 阅读 · 0 评论 -
socket通信简介
我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型有哪些?还有socket的基本函数,这些都是本文想介绍的。本文的主要内容如下:转载 2014-10-16 20:27:13 · 332 阅读 · 0 评论 -
UDP协议与TCP协议的比较
UDP协议在创建插口之后,可以同多个服务器端建立通信,而TCP协议只能与一个服务器端建立通信,TCP不允许目的地址是广播或多播地址,UDP允许。UDP协议客户端同服务器端的通信关系可以是一对多的关系,而TCP协议只能是一对一的关系。原创 2014-10-18 10:54:58 · 441 阅读 · 0 评论 -
UDP中的Connect
标准的udp客户端开了套接口后,一般使用sendto和recvfrom函数来发数据,实际上,udp发送数据有两种方法供大家选用的:方法一: socket----->sendto()或recvfrom() 方法二: socket----->connect()----->send()或recv().(此时sendto,recvfrom仍可用)转载 2014-10-18 10:22:26 · 349 阅读 · 0 评论 -
C语言的那些秘密之---函数返回局部变量
一般的来说,函数是可以返回局部变量的。 局部变量的作用域只在函数内部,在函数返回后,局部变量的内存已经释放了。因此,如果函数返回的是局部变量的值,不涉及地址,程序不会出错。但是如果返回的是局部变量的地址(指针)的话,程序运行后会出错。因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放了,这样指针指向的内容就是不可预料的内容,调用就会出错。准确的来说,函数不能通过返回指向栈内存的指针(注意转载 2016-03-13 10:11:54 · 355 阅读 · 0 评论