C&C++
u013982161
这个作者很懒,什么都没留下…
展开
-
C++中指针和引用的区别
指针和引用在C++中很常用,但是对于它们之间的区别很多初学者都不是太熟悉,下面来谈谈他们2者之间的区别和用法。 1. 指针和引用的定义和性质区别(1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。如:int a=1;int *p=&a;int a=1;int &b=a;转载 2016-11-05 21:51:03 · 134 阅读 · 0 评论 -
C++模板(二)
四、类模板的默认模板类型形参1、可以为类模板的类型形参提供默认值,但不能为函数模板的类型形参提供默认值。函数模板和类模板都可以为模板的非类型形参提供默认值。2、类模板的类型形参默认值形式为:template class A{};为第二个模板类型形参T2提供int型的默认值。3、类模板类型形参默认值和函数的默认参数一样,如果有多个类型形参则从第一个形参设定了默认值之后的所有模转载 2016-11-06 13:01:53 · 204 阅读 · 0 评论 -
C++命名空间
本讲基本要求* 掌握:命名空间的作用及定义;如何使用命名空间。* 了解:使用早期的函数库 重点、难点◆命名空间的作用及定义;如何使用命名空间。 在学习本书前面各章时,读者已经多次看到在程序中用了以下语句:using namespace std;这就是使用了命名空间std。在本讲中将对它作较详细的介绍。 一、 为什么需要命名空间(问题提出)命名空间是ANS转载 2016-10-16 12:31:40 · 239 阅读 · 0 评论 -
C++ this指针的理解
先要理解class的意思。class应该理解为一种类型,象int,char一样,是用户自定义的类型。(虽然比int char这样build-in类型复杂的多,但首先要理解它们一样是类型)。用这个类型可以来声明一个变量,比如int x, myclass my等等。这样就像变量x具有int类型一样,变量my具有myclass类型。理解了这个,就好解释this了,my里的this就是指向my的指针。转载 2016-10-16 14:26:20 · 209 阅读 · 0 评论 -
C++ 类的静态成员详细讲解
在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用。所以在所有对象中都可以共享它。使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节省内存。静态成员的定义或声明要加个关键static。静态成员可以通过双冒号来使用即::。 在C++中类的静态成员变量和静态成员函数是个容易出错的地方,本文先通过几个例子来总结静态成员变量和转载 2016-10-16 14:31:48 · 163 阅读 · 0 评论 -
浅谈 C++ 中的 new/delete 和 new[]/delete[]
在 C++ 中,你也许经常使用 new和 delete 来动态申请和释放内存,但你可曾想过以下问题呢?· new和 delete 是函数吗?· new []和 delete []又是什么?什么时候用它们?· 你知道 operator new和 operator delete吗?· 为什么 new转载 2016-10-16 14:17:48 · 207 阅读 · 0 评论 -
C++ const 的全面总结
C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助。Const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。 一、Const作用如下表所示:No.作用说明参考代码转载 2016-10-16 14:55:42 · 251 阅读 · 0 评论 -
深入分析 Linux 内核链表
一、 链表数据结构简介链表是一种常用的组织有序数据的数据结构,它通过指针将一系列数据节点连接成一条数据链,是线性表的一种重要实现方式。相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据总量,可以随机分配空间,可以高效地在链表中的任意位置实时插入或删除数据。链表的开销主要是访问的顺序性和组织链的空间损失。通常链表数据结构至少应包含两个域:数据域和指针域,数据域用于存储数据,指针域用转载 2016-09-30 22:31:47 · 210 阅读 · 0 评论 -
C++函数重载
写在前面:函数重载的重要性不言而明,但是你知道C++中函数重载是如何实现的呢(虽然本文谈的是C++中函数重载的实现,但我想其它语言也是类似的)?这个可以分解为下面两个问题1、声明/定义重载函数时,是如何解决命名冲突的?(抛开函数重载不谈,using就是一种解决命名冲突的方法,解决命名冲突还有很多其它的方法,这里就不论述了)2、当我们调用一个重载的函数时,又是如何去解析的?(即怎么知道调转载 2016-10-07 13:31:31 · 2716 阅读 · 1 评论 -
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 · 1123 阅读 · 0 评论 -
Boost Asio介绍
一 简介 Boost Asio ( asynchronous input and output)关注异步输入输出。Boost Asio库提供了平台无关性的异步数据处理能力(当然它也支持同步数据处理)。一般的数据传输过程需要通过函数的返回值来判断数据传输是否成功。Boost Asio将数据传输分为两个独立的步骤:采用异步任务的方式开始数据传输。 将传输结果通知调用转载 2016-11-12 14:32:53 · 250 阅读 · 0 评论 -
boost bind的使用方法
头文件: boost/bind.hppbind 是一组重载的函数模板。用来向一个函数(或函数对象)绑定某些参数。bind的返回值是一个函数对象.它的源文件太长了. 看不下去. 这里只记下它的用法: 1 对于普通函数假如有函数 fun() 如下: voidfun(int x, int y) { cout } 现在我们看看怎么用 bind 向其绑定参转载 2016-11-12 14:51:46 · 241 阅读 · 0 评论 -
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 · 887 阅读 · 0 评论 -
boost thread使用方法
一、创建一个线程创建线程 boost::thread myThread(threadFun); 需要注意的是:参数可以是函数对象或者函数指针。并且这个函数无参数,并返回void类型。 当一个thread执行完成时,这个子线程就会消失。注意这个线程对象不会消失,它仍然是一个还处在它的生存期的C++对象。同理,当对一个堆上的线程对象的指针调用delete时候,线程对象被销毁转载 2016-11-12 15:29:13 · 10915 阅读 · 0 评论 -
以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 · 594 阅读 · 0 评论 -
boost function和bind,实现Linux线程类封装
最近在看陈硕的MUDUO网络通信库的过程中,发现作者大量使用了Boost::function以及Boost::bind功能,为了能够正常的学习作者的代码,决定先弄明白function以及bind的功能。Boost::Function 是对函数指针的对象化封装,在概念上与广义上的回调函数类似。相对于函数指针,function除了使用自由函数,还可以使用函数对象,甚至是类的成员函数,这个就很强大了转载 2016-11-12 15:41:12 · 447 阅读 · 1 评论 -
C++模板(一)
模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型。 模板是一种对类型进行参数化的工具; 通常有两种形式:函数模板和类模板; 函数模板针对仅参数类型不同的函数; 类模板针对仅数据成员和成员函数类型不同的类。使用模板的目的就是能够让程序员编写与类型无关的代码。比如编写了一个交换两个转载 2016-11-06 12:56:45 · 240 阅读 · 0 评论 -
深入理解C++中的异常处理机制
异常处理增强错误恢复能力是提高代码健壮性的最有力的途径之一,C语言中采用的错误处理方法被认为是紧耦合的,函数的使用者必须在非常靠近函数调用的地方编写错误处理代码,这样会使得其变得笨拙和难以使用。C++中引入了异常处理机制,这是C++的主要特征之一,是考虑问题和处理错误的一种更好的方式。使用错误处理可以带来一些优点,如下:· 错误处理代码的编写不再冗长乏味,并且不再和正常的代码转载 2016-11-06 12:35:52 · 5386 阅读 · 0 评论 -
C++拷贝构造函数详解
一. 什么是拷贝构造函数首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a = 100;int b = a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。#include using namespace std; class CExample {private:转载 2016-11-05 22:11:39 · 165 阅读 · 0 评论 -
C++拷贝构造函数的继承
拷贝构造函数要求把所有变量都需要做拷贝。在有继承关系情况先,子类的拷贝构造函数,需要调用父类拷贝构造函数。示例代码如下:class Base{public: virtual ~Base(); Base(const char *pStr); Base(const Base &other); virtual void CallFunction() ;转载 2016-11-05 22:17:53 · 2656 阅读 · 0 评论 -
C++ 对象数组
类是对象的抽象,我们可以使用一个类来定义很多的对象,然后每个对象都有自己的属性。当我们使用类来定义很多相同结构的对象的时候,我们可以采取对象数组的方法。例如,一个班有50个学生,我们定义了一个学生类,该类的学生具有相同的数据成员和成员函数,我们就可以定义一个这样的数组。Student stdu[50];//假设已经声明了Student类,定义stud数组,有50个元素转载 2016-10-16 16:25:24 · 8916 阅读 · 1 评论 -
C++函数的返回引用
一,c++函数的返回分为以下几种情况 1)主函数main的返回值:这里提及一点,返回0表示程序运行成功。2)返回非引用类型:函数的返回值用于初始化在跳用函数出创建的临时对象。用函数返回值初始化临时对象与用实参初始化形参的方法是一样 的。如果返回类型不是引用,在调用函数的地方会将函数返回值复制给临时对象。且其返回值既可以是局部对象,也可以是求解表达式的结果。3)返回引用:当函数返回引转载 2016-10-16 16:01:26 · 176 阅读 · 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转载 2016-10-16 13:58:04 · 9806 阅读 · 0 评论 -
C++ 之父给C程序员的建议
1,C++里几乎不需要用到宏,用const火enum定义明显的常量。用inline避免函数的额外开销,用template去刻画一族函数或者类型,用namespace去避免名字冲突。类也可以。2,不要在你需要之前申明它,什么时候用什么时候申明(当年从C++转C的时候吃了老苦了)。3,不要用malloc(),new可以做的很好,对于realloc(),可以试一试vector。4,试着避免v转载 2016-10-16 13:05:17 · 287 阅读 · 0 评论 -
C++类的继承和派生
一、基本概念1、类的继承,是新的类从已有类那里得到已有的特性。或从已有类产生新类的过程就是类的派生。原有的类称为基类或父类,产生的新类称为派生类或子类。 2、派生类的声明:class 派生类名:继承方式 基类名1, 继承方式 基类名2,...,继承方式 基类名n{ 派生类成员声明;}; 3、一个派生类可以同时有多个基类,这种情况称为多重继承,派生类只有一个转载 2016-11-05 22:30:53 · 208 阅读 · 0 评论 -
C++多继承
多继承可以看作是单继承的扩展所谓多继承是指派生类具有多个基类,派生类与每个基类之间的关系仍可看作是一个单继承。多继承下派生类的定义格式如下:class :,,…{}; 其中,,,…是三种继承方式:public、private、protected之一。例如:class A{…};class B{…};class C : public A转载 2016-11-05 22:48:54 · 246 阅读 · 0 评论 -
C++多态实现机制
1 什么是多态?多态性可以简单的概括为“1个接口,多种方法”,在程序运行的过程中才决定调用的机制程序实现上是这样,通过父类指针调用子类的函数,可以让父类指针有多种形态。2 实现机制举一个例子:#include class animal{public:void sleep(){cout}void breathe(){cout}};转载 2016-11-06 08:58:30 · 208 阅读 · 0 评论 -
C++虚函数
C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,我在这里不做过多的转载 2016-11-06 11:12:52 · 153 阅读 · 0 评论 -
C++虚析构函数
在实现多态时候,基类的析构函数应该写成virtual。在用基类申明实例化的子类对象,在delete时候,如果基类不是virtual的析构函数则不能调用进子类的析构函数 class Base{public: Base(); virtual ~Base();public: char *m_pName;}; Base::Base(){ cou转载 2016-11-06 11:21:33 · 160 阅读 · 0 评论 -
C++类内存分布
书上类继承相关章节到这里就结束了,这里不妨说下C++内存分布结构,我们来看看编译器是怎么处理类成员内存分布的,特别是在继承、虚函数存在的情况下。工欲善其事,必先利其器,我们先用好Visual Studio工具,像下面这样一步一步来:先选择左侧的C/C++->命令行,然后在其他选项这里写上/d1 reportAllClassLayout,它可以看到所有相关类的内存布局,如转载 2016-11-06 11:57:15 · 172 阅读 · 0 评论 -
C++继承中重载、重写、重定义的区别
重载overload:是函数名相同,参数列表不同 重载只是在类的内部存在。但是不能靠返回类型来判断。重写override:也叫做覆盖。子类重新定义父类中有相同名称和参数的虚函数。函数特征相同。但是具体实现不同,主要是在继承关系中出现的 。重写需要注意:1 被重写的函数不能是static的。必须是virtual的2 重写函数必须有相同的类型,名称和参数列表3 重写函数的访问修饰符转载 2016-11-06 12:12:13 · 313 阅读 · 0 评论 -
C++函数指针的用法
c语言函数指针的定义形式:返回类型 (*函数指针名称)(参数类型,参数类型,参数类型,…);c++函数指针的定义形式:返回类型 (类名称::*函数成员名称)(参数类型,参数类型,参数类型,….); c语言函数指针使用举例: #include #include int fun1(){ printf("this is fun1 call\n");转载 2016-11-06 12:20:19 · 228 阅读 · 0 评论 -
C++友元函数和友元类
今天在准备计算机等级考试的时候,被一系列的友元函数给搞混了,现在结合自己的理解和查阅的资料来总结下友元函数和友元类。百度百科上对友元函数是这样定义的:友元函数是指某些虽然不是类成员却能够访问类的所有成员的函数。。类授予它的友元特别的访问权。通常同一个开发者会出于技术和非技术的原因,控制类的友元和成员函数(否则当你想更新你的类时,还要征得其它部分的拥有者的同意)。为什么会有友元函数?结合转载 2016-11-06 12:30:57 · 290 阅读 · 0 评论 -
C/C++宏定义的可变参数详细解析
在1999年版本的ISO C 标准中,宏可以象函数一样,定义时可以带有可变参数。宏的语法和函数的语法类似。编写代码的过程中,经常会输出一些调试信息到屏幕上,一般会调用printf这类的函数。但是当调试解决之后,我们需要手工将这些地方删除或者注释掉。最近在看《Linux C编程一站式学习》这本书,就想到一个方法:void myprintf(char* fmt, ...){}#转载 2017-05-01 18:19:54 · 4634 阅读 · 0 评论