- 博客(30)
- 资源 (4)
- 收藏
- 关注
转载 gdb 条件断点
GDB是linux上的调试利器,是我们每个基于linux系统编程coder必须掌握的一门技术。在此记录一个使用gdb条件断点的小例子:gdb条件调试一般应用在循环、链表的遍历、或者其他变量的值可能被多次改变的场合。先上一个例子: 调试用例gdb_condition.c源码: 1/**********************************************
2016-11-13 18:41:31 14528
转载 gdb 信号处理
信号(Signals) 信号是一种软中断,是一种处理异步事件的方法。一般来说,操作系统都支持许多信号。尤其是UNIX,比较重要应用程序一般都会处理信号。UNIX定义了许多信号,比如SIGINT表示中断字符信号,也就是Ctrl+C的信号,SIGBUS表示硬件故障的信号;SIGCHLD表示子进程状态改变信号; SIGKILL表示终止程序运行的信号,等等。信号量编程是UNIX下非常重要的一种技术
2016-11-13 18:40:14 541
转载 gdb watch
这里大概说下gdb调试程序时,watch的使用。至于原理尚不清楚,以后再做补充,还请见谅。watch通常需要和break,run,continue联合使用。下面举例说明:代码如下:调试的时候过程如下:(gdb) l1 #include 2 3 int main()4 {5 int a=0;6
2016-11-13 18:39:18 447
转载 Linux静态库与动态库
这次分享的宗旨是——让大家学会创建与使用静态库、动态库,知道静态库与动态库的区别,知道使用的时候如何选择。这里不深入介绍静态库、动态库的底层格式,内存布局等,有兴趣的同学,推荐一本书《程序员的自我修养——链接、装载与库》。 什么是库库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。本质上来说库是
2016-11-13 12:32:24 420
转载 以boost function和bind取代虚函数
这是一篇比较情绪化的blog,中心思想是“继承就像一条贼船,上去就下不来了”,而借助boost::function和boost::bind,大多数情况下,你都不用上贼船。boost::function和boost::bind已经纳入了std::tr1,这或许是C++0x最值得期待的功能,它将彻底改变C++库的设计方式,以及应用程序的编写方式。Scott Meyers的Effective C
2016-11-12 15:51:39 617
转载 boost function和bind,实现Linux线程类封装
最近在看陈硕的MUDUO网络通信库的过程中,发现作者大量使用了Boost::function以及Boost::bind功能,为了能够正常的学习作者的代码,决定先弄明白function以及bind的功能。Boost::Function 是对函数指针的对象化封装,在概念上与广义上的回调函数类似。相对于函数指针,function除了使用自由函数,还可以使用函数对象,甚至是类的成员函数,这个就很强大了
2016-11-12 15:41:12 469 1
转载 boost thread使用方法
一、创建一个线程创建线程 boost::thread myThread(threadFun); 需要注意的是:参数可以是函数对象或者函数指针。并且这个函数无参数,并返回void类型。 当一个thread执行完成时,这个子线程就会消失。注意这个线程对象不会消失,它仍然是一个还处在它的生存期的C++对象。同理,当对一个堆上的线程对象的指针调用delete时候,线程对象被销毁
2016-11-12 15:29:13 11023
转载 boost shared_ptr的使用方法
1. boost::shared_ptr的用法 下面用一个简单的例子说明shared_ptr的用法: #include #include class A {public: void print() { printf("classA print!\n"); }}; int main(int argc, char **ar
2016-11-12 15:19:12 911
转载 boost function用法详解
要开始使用 Boost.Function, 就要包含头文件 "boost/function.hpp", 或者某个带数字的版本,从"boost/function/function0.hpp" 到"boost/function/function10.hpp". 如果你知道你想保存在 function 中的函数的参数数量,这样做可以让编译器仅包含需要的头文件。如果包含 "boost/function.h
2016-11-12 15:05:42 1597
转载 boost bind的使用方法
头文件: boost/bind.hppbind 是一组重载的函数模板。用来向一个函数(或函数对象)绑定某些参数。bind的返回值是一个函数对象.它的源文件太长了. 看不下去. 这里只记下它的用法: 1 对于普通函数假如有函数 fun() 如下: voidfun(int x, int y) { cout } 现在我们看看怎么用 bind 向其绑定参
2016-11-12 14:51:46 254
转载 Boost Asio介绍
一 简介 Boost Asio ( asynchronous input and output)关注异步输入输出。Boost Asio库提供了平台无关性的异步数据处理能力(当然它也支持同步数据处理)。一般的数据传输过程需要通过函数的返回值来判断数据传输是否成功。Boost Asio将数据传输分为两个独立的步骤:采用异步任务的方式开始数据传输。 将传输结果通知调用
2016-11-12 14:32:53 265
转载 Linux编译和安装boost库
1. 下载boost安装包并解压缩到http://www.boost.org/下载boost的安装包,以boost_1_58_0.tar.gz为例 下载完成后进行解压缩:tar zxvf boost_1_58_0.tar.gz 2.设置编译器和所选库先进入解压缩后的目录:cd boost_1_58_0 然后运行bootstrap.sh脚本并设置相关参数:./
2016-11-12 12:19:25 1146
原创 Linux安装gcc和g++
Linux的服务器上安装C/C++的编译器gcc和g++,运行了如下两条命令: yum install gccyum install g++gcc可以正确安装,安装g++时却提示: Cannotfind a package matching g++ 网上搜索后发现,原来在linux下,C++的编译器不是g++这个名称,而是gcc-c++,安装g++运行如下命令: y
2016-11-12 11:58:57 1910
原创 CentOS安装lrzsz
1. Yum安装命令yum install lrzsz 2. 下载安装包cd /tmpwgethttp://www.ohse.de/uwe/releases/lrzsz-0.12.20.tar.gztar zxvf lrzsz-0.12.20.tar.gz && cdlrzsz-0.12.20./configure && make && makeinstall
2016-11-12 11:21:24 3613 1
转载 xshell软件选中复制、右键粘贴
1、 打开xshell4,单击菜单栏的“Tools”选项,选中“Options”菜单,进入参数设置界面。2、 切换到"Keyboardand Mouse"栏,把"Right-bottox"要素的值选为“Paste theclipboard contents”,点击确定。在选项“Copy selected text to the auto”打“√”。3
2016-11-12 11:10:21 4005 1
转载 C++模板(二)
四、类模板的默认模板类型形参1、可以为类模板的类型形参提供默认值,但不能为函数模板的类型形参提供默认值。函数模板和类模板都可以为模板的非类型形参提供默认值。2、类模板的类型形参默认值形式为:template class A{};为第二个模板类型形参T2提供int型的默认值。3、类模板类型形参默认值和函数的默认参数一样,如果有多个类型形参则从第一个形参设定了默认值之后的所有模
2016-11-06 13:01:53 220
转载 C++模板(一)
模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型。 模板是一种对类型进行参数化的工具; 通常有两种形式:函数模板和类模板; 函数模板针对仅参数类型不同的函数; 类模板针对仅数据成员和成员函数类型不同的类。使用模板的目的就是能够让程序员编写与类型无关的代码。比如编写了一个交换两个
2016-11-06 12:56:45 266
转载 深入理解C++中的异常处理机制
异常处理增强错误恢复能力是提高代码健壮性的最有力的途径之一,C语言中采用的错误处理方法被认为是紧耦合的,函数的使用者必须在非常靠近函数调用的地方编写错误处理代码,这样会使得其变得笨拙和难以使用。C++中引入了异常处理机制,这是C++的主要特征之一,是考虑问题和处理错误的一种更好的方式。使用错误处理可以带来一些优点,如下:· 错误处理代码的编写不再冗长乏味,并且不再和正常的代码
2016-11-06 12:35:52 5434
转载 C++友元函数和友元类
今天在准备计算机等级考试的时候,被一系列的友元函数给搞混了,现在结合自己的理解和查阅的资料来总结下友元函数和友元类。百度百科上对友元函数是这样定义的:友元函数是指某些虽然不是类成员却能够访问类的所有成员的函数。。类授予它的友元特别的访问权。通常同一个开发者会出于技术和非技术的原因,控制类的友元和成员函数(否则当你想更新你的类时,还要征得其它部分的拥有者的同意)。为什么会有友元函数?结合
2016-11-06 12:30:57 306
转载 C++函数指针的用法
c语言函数指针的定义形式:返回类型 (*函数指针名称)(参数类型,参数类型,参数类型,…);c++函数指针的定义形式:返回类型 (类名称::*函数成员名称)(参数类型,参数类型,参数类型,….); c语言函数指针使用举例: #include #include int fun1(){ printf("this is fun1 call\n");
2016-11-06 12:20:19 237
转载 C++继承中重载、重写、重定义的区别
重载overload:是函数名相同,参数列表不同 重载只是在类的内部存在。但是不能靠返回类型来判断。重写override:也叫做覆盖。子类重新定义父类中有相同名称和参数的虚函数。函数特征相同。但是具体实现不同,主要是在继承关系中出现的 。重写需要注意:1 被重写的函数不能是static的。必须是virtual的2 重写函数必须有相同的类型,名称和参数列表3 重写函数的访问修饰符
2016-11-06 12:12:13 329
转载 C++类内存分布
书上类继承相关章节到这里就结束了,这里不妨说下C++内存分布结构,我们来看看编译器是怎么处理类成员内存分布的,特别是在继承、虚函数存在的情况下。工欲善其事,必先利其器,我们先用好Visual Studio工具,像下面这样一步一步来:先选择左侧的C/C++->命令行,然后在其他选项这里写上/d1 reportAllClassLayout,它可以看到所有相关类的内存布局,如
2016-11-06 11:57:15 181
转载 C++虚析构函数
在实现多态时候,基类的析构函数应该写成virtual。在用基类申明实例化的子类对象,在delete时候,如果基类不是virtual的析构函数则不能调用进子类的析构函数 class Base{public: Base(); virtual ~Base();public: char *m_pName;}; Base::Base(){ cou
2016-11-06 11:21:33 167
转载 C++虚函数
C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,我在这里不做过多的
2016-11-06 11:12:52 163
转载 C++多态实现机制
1 什么是多态?多态性可以简单的概括为“1个接口,多种方法”,在程序运行的过程中才决定调用的机制程序实现上是这样,通过父类指针调用子类的函数,可以让父类指针有多种形态。2 实现机制举一个例子:#include class animal{public:void sleep(){cout}void breathe(){cout}};
2016-11-06 08:58:30 221
转载 C++多继承
多继承可以看作是单继承的扩展所谓多继承是指派生类具有多个基类,派生类与每个基类之间的关系仍可看作是一个单继承。多继承下派生类的定义格式如下:class :,,…{}; 其中,,,…是三种继承方式:public、private、protected之一。例如:class A{…};class B{…};class C : public A
2016-11-05 22:48:54 289
转载 C++类的继承和派生
一、基本概念1、类的继承,是新的类从已有类那里得到已有的特性。或从已有类产生新类的过程就是类的派生。原有的类称为基类或父类,产生的新类称为派生类或子类。 2、派生类的声明:class 派生类名:继承方式 基类名1, 继承方式 基类名2,...,继承方式 基类名n{ 派生类成员声明;}; 3、一个派生类可以同时有多个基类,这种情况称为多重继承,派生类只有一个
2016-11-05 22:30:53 219
转载 C++拷贝构造函数的继承
拷贝构造函数要求把所有变量都需要做拷贝。在有继承关系情况先,子类的拷贝构造函数,需要调用父类拷贝构造函数。示例代码如下:class Base{public: virtual ~Base(); Base(const char *pStr); Base(const Base &other); virtual void CallFunction() ;
2016-11-05 22:17:53 2690
转载 C++拷贝构造函数详解
一. 什么是拷贝构造函数首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a = 100;int b = a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。#include using namespace std; class CExample {private:
2016-11-05 22:11:39 173
转载 C++中指针和引用的区别
指针和引用在C++中很常用,但是对于它们之间的区别很多初学者都不是太熟悉,下面来谈谈他们2者之间的区别和用法。 1. 指针和引用的定义和性质区别(1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。如:int a=1;int *p=&a;int a=1;int &b=a;
2016-11-05 21:51:03 145
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人