C++
是蛋筒啊
保持学习 保持热情
展开
-
C++与C语言的区别及函数重载
C语言与C++的区别主要体现在以下几个方面:关键字的不同:C99标准中有32个,C++98标准中有63个C中定义变量必须在最前面,而C++中可在任何需要的位置定义C中定义函数时未设定返回值类型,系统不会报错,会自动将函数的返回值解析为int型,但在C++中出现这种情况,编译不会通过,C++对返回值类型检测严格C中函数不支持缺省参数,而C++中函数支持缺省参数 缺省参数分为全缺省和半缺...原创 2018-04-01 10:13:18 · 497 阅读 · 0 评论 -
为智能指针定制删除器
为智能指针定制删除器很多时候我们都用new来申请空间,用delete来释放。库中实现的各种智能指针,默认也都是用delete来释放空间,但是若我们采用malloc申请的空间或是用fopen打开的文件,这时我们的智能指针就无法来处理,因此我们需要为智能指针定制删除器,提供一个可以自由选择析构的接口,这样,我们的智能指针就可以处理不同形式开辟的空间以及可以管理文件指针。这里我们介绍两种不同的方...原创 2018-06-29 08:14:43 · 1132 阅读 · 1 评论 -
空类中都有哪些东西
定义一个空类,里面什么内容都没有class A{};想想看,它的大小应该是多少??要计算一个类对象的大小,要知道这么几点:类大小是非静态数据成员的类型大小之和若类中定义了虚函数,需要考虑到虚表指针也占用类对象的内存空间(32位机器下占用四字节)编译器为了提高存取效率,类大小往往会被调整为系统的整数倍,和结构体中的内存对齐类似(结构体内存对齐详情戳这里为什么要进行结构体...原创 2018-08-18 16:56:25 · 3510 阅读 · 0 评论 -
深拷贝和浅拷贝
定义一个string类,未显式给出它的拷贝构造函数class string{public: string(const char* str="") :_str(new char[strlen(str)+1]) { strcpy(_str,str); } ~string() { if(_str) ...原创 2018-08-18 18:01:45 · 250 阅读 · 0 评论 -
操作符重载
操作符重载的实质是函数重载,C++预定义的操作符的操作对象只能是基本的数据类型,而对于我们用户自定义的类型如类类型也需要类似的运算操作,此时就需要重新定义这些这些运算符,赋予他们新功能,使他在特定的时候执行特定的操作,可以提高代码的可读性。它的一般格式为:返回值类型 oprerator<运算符>(参数列表){ //函数体}并不是所有的运算符都能重载不能...原创 2018-08-18 19:00:44 · 377 阅读 · 0 评论 -
内联函数和宏
当我们写了一个小函数,函数体只有一两行代码,但是该函数被频繁调用,函数调用有一定的开销,要保存上下文,维护函数栈帧,进行参数拷贝,执行结束还要跳转回去,恢复原现场继续执行等进行一系列工作。为了节省开销,我们首先想到的是使用宏函数来代替,这样确实可以,但是注意宏有很多缺点。宏的概念: 宏定义将一个标识符定义成一个字符串,源程序中的标识符都以字符串进行替换宏的优缺点?? 优点:提高程...原创 2018-08-19 00:32:52 · 225 阅读 · 0 评论 -
单例模式——C++版
单例模式是什么??单例模式(Singleton)是一种常用的设计模式,它能够保证系统中应用该模式的类只有一个实例。为什么要存在单例模式??在很多场景下,我们都希望一个类只能创建出唯一的对象,例如windows下的任务管理器,我们就只能打开一个。若不使用单例模式,就会在多次打开时弹出多个窗口,重复对象,浪费内存。而且要是多个窗口的状态不一致,也会造成误解。因此保证某个对象只能有一个实...原创 2018-08-16 14:14:44 · 146 阅读 · 0 评论 -
static关键字
static:在C中我们知道,static作为一个关键字,既能修饰变量,也能修饰函数1.修饰变量若修饰局部变量,会改变他的生命周期,出了它现在所处的作用域,也不会被销毁,因为此时它已经不是存储在栈上,而是存在数据段上,数据段上的内容只有进程结束才会被销毁,但它的作用域不会被改变,还是处于当前作用域,该作用域之外不可见。 注意: 由于static局部变量的特性,使得含有静...原创 2018-08-16 17:23:48 · 241 阅读 · 0 评论 -
const关键字
C中的constconst限定一个变量不允许被改变 const修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的。 相比于define定义的变量,const变量多了类型检查,使程序更加安全,而define仅仅是简单的文本替换,有时候会出现一些错误。 const可以保护被修饰的内容,防止意外修改,增强程序健壮性。当我们使用const修饰的变量来定义数组大小时,程序会报错...原创 2018-08-16 19:27:32 · 151 阅读 · 0 评论 -
关于智能指针(下)
关于智能指针(下)前面我们简单介绍了前三种智能指针AutoPtr,ScopedPtr,SharedPtr,接着我们来看第四种WeakPtrWeakPtrWeakPtr又称弱指针,它不能单独使用,不能独立管理资源,需要和SharedPtr结合起来解决SharedPtr中存在的循环引用的问题。它的实现原理和SharedPtr非常类似,只是二者的引用计数有一些差别。在boost库中s...原创 2018-06-29 08:13:26 · 595 阅读 · 1 评论 -
关于智能指针(上)
关于智能指针(上)引入智能指针的目的是为了避免我们在申请量空间之后忘记delete ,或是当程序出现异常时,程序会直接从一个模块跳出来,导致后面的delete语句不能被执行,因此存在内存泄漏问题。如何让我们在使用完资源后,使系统自动为我们释放这些资源呢? 我们知道析构函数具有这样的功能。因此,我们将需要将基本类型指针封装为类对象指针,该类一定是模板类,以适应不同类型指针的需求。在构造...原创 2018-06-29 08:10:37 · 140 阅读 · 0 评论 -
引用
引用的概念:引用是一种新的变量类型,它的作用是为一个已有变量起一个别名。 一个变量和它的引用对应同一块地址空间。一般格式为:类型名& 引用变量名 = 已有变量名其中 “ & ” 称为引用标识符,它只有放在类型后面才作为引用,放在变量前为取地址符。说明:引用在定义时必须初始化一个变量可以有多个引用一个引用变量只能对应一个变量实体,一旦引用了一个变量实体,再...原创 2018-04-03 19:21:21 · 202 阅读 · 0 评论 -
类与对象
面向过程与面向对象的区别:程序=算法+数据结构 面向过程的程序设计中一般是将二者分开来,一种算法对应多组数据结构或是一组数据对应多种算法,数据和算法都是公用的,数据可被任何操作修改和使用,显然,这种做法缺乏安全性。面向对象的程序设计刚好解决了这个问题,就是说,一种操作对应一组数据,将相关的数据和操作放在一起,形成一个整体,与外界分隔开来,这就是我们常说的对象。即就是: 对象=算法+数据...原创 2018-04-11 13:30:40 · 147 阅读 · 0 评论 -
构造函数和析构函数
构造函数:在创建一个对象时,我们通常要对其进行初始化,即就是为该对象的成员变量赋初值,因为一旦我们创建一对象,系统会为该对象分配一定大小的空间,若我们不对它进行初始化,该空间中的内容都是一些随机值,而对象是一个实体,它表现了事物的具体属性,应该有一个确定的值。C++中提供了构造函数来进行对象初始化的工作。1.定义 构造函数是类中一种特殊的成员函数,它的名字与类名相同,无返回值,在创建该类...原创 2018-04-30 17:19:02 · 307 阅读 · 0 评论 -
关于this指针
一个类的对象中实际只包含了该对象的数据成员信息,当我们创建了多个类的对象时,使对象1调用该类的成员函数,为什么可以改变对象1中的信息,而不去设置其他对象的信息?成员函数在类中只有一份,所有该类的对象共同使用,编译器是如何识别并处理的呢?编译器识别一个类分为三步: 1.识别类的类名 2.识别类的成员变量 3.识别类的成员函数并对成员函数进行修改 修改方式: 成员函数有一个隐藏...原创 2018-04-27 10:47:07 · 2501 阅读 · 0 评论 -
多态了解一下
多态1.概念:按其字面意思为“同一事物具有多种形态”,可以这样理解:向不同的对象发送同一个消息,不同的对象接收消息后会产生不同的行为(即调用不同的函数),也就是说,每个对象可以用自己的方式去相应共同的消息。 多态性是面向对象程序设计的基本特征,若一个类不支持多态,只能说明它是基于对象的,而不是面向对象的,c++中的多态体现在编译和运行两个方面,分别对应静态多态和动态多态。 静态多...原创 2018-05-23 19:06:36 · 301 阅读 · 1 评论 -
不同继承体系下带虚函数的对象模型
不同继承体系下带虚函数的对象模型单继承class B{public: virtual void Fun1() { cout << "B::Fun1()" << endl; } virtual void Fun2() { cout << "B::Fun2()" <&l...原创 2018-05-23 19:11:51 · 227 阅读 · 0 评论 -
C++IO流
C++IO流C++流是指信息从外部输入设备(键盘)向计算机内部输入和从内存向外设(显示器)输出的过程,这样的输入输出称作“流”。 流分为两种,一种是及时输出的,一种带缓冲区的 C++中定义了标准流类库,来完成各种功能 其中,定义了四个全局流对象:cin’标准输入流对象,标准设备为键盘,cout标准输出流对象,标准设备为显示器,cerr和clog为标准错误输出流,输出设备为显示器。 ...原创 2018-06-30 09:43:36 · 265 阅读 · 0 评论 -
C++类型转换
C++类型转换C++为了规范C中的类型转换,加强类型转换的可视性,引入了四种强制类型转换操作符:static_cast, reinterpret_cast, const_cast, dynamic_cast 他们本质上都是模板类。下面分别来介绍:1.static_cast它用于非多态类型的转换(静态转换),对应于C中的隐式类型转换,但他不能用于两个不相关类型的转换,如整形和整...原创 2018-06-30 09:49:36 · 1722 阅读 · 0 评论 -
细说new和delete
C++对C是兼容的,所以C中的动态内存管理机制malloc/free在C++中可以继续使用 为了进行完善,C++也提出了自己的一套内存管理方式:使用new和delete对动态内存进行管理。使用方式: 1.申请单个数据的空间类型名 *p1=new 类型名; //申请delete p1; //释放这里的类型可以是内置类型,也可以是自定义类型如结构体类型、类类型等...原创 2018-08-20 08:25:22 · 204 阅读 · 0 评论