自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(52)
  • 收藏
  • 关注

转载 c语言中的字符串

字符串是有序字符的集合 字符串是程序中的基本元素之一 c语言中没有字符串的概念   c语言中通过特殊的字符数组模拟字符串   c语言中的字符串是以‘\0’结尾的字符数组 在c语言中,双引号引用的单个或多个字符是一种特殊的字面量   存储于程序的全局只读存储区   本质为字符数组,编译器自动在结尾加上‘\0’字符 字符串的定义 char sa[] = {'w','\...

2018-06-27 00:39:00 174

转载 指针和数组

数组是一段连续的内存空间 数组空间大小为sizeof(array_type)*array_size 数组名可看作指向数组第一个元素的常量指针 当指针p指向一个同类型的数组的元素时:p+1将指向当前元素的下一个元素;p-1将指向当前元素的上一个元素。 指针之间只支持减法运算 参与减法运算的指针类型必须相同 注意: 1.只有当两个指针指向同一个数组中的元素时,...

2018-06-27 00:24:00 149

转载 数组的本质分析

数组是相同类型的变量的有序集合 数组在一片连续的内存空间中存储元素 数组元素的个数可以显示或隐式指定 int a[5] = {1,2}; int b[] = {1,2}; 数组名代表数组首元素的地址 数组的地址需要取地址符&才能得到 数组首元素的地址与数组的地址值相同 数组首元素的地址与数组的地址是两个不同的概念 数组名可以看作一个常量指针 ...

2018-06-27 00:03:00 171

转载 指针的本质分析

*号的意义 在指针声明时,*号表示所声明的变量为指针 在指针使用时,*号表示取指针所指向的内存空间中的值 指针是变量,因此可以声明指针参数 当一个函数体内部需要改变实参的值,则需要使用指针参数 函数调用时实参值将复制到形参 指针适用于复杂数据类型作为参数的函数中 const int* p;  //p可变,p指向的内容不可变 int const* p;  //p...

2018-06-26 22:53:00 121

转载 经典问题解析五

c+++中任然支持c语言中的可变参数函数 c++编译器的匹配调用优先级 1.重载函数 2.函数模板 3.变参函数 存在的缺陷: 变参函数无法解析对象参数,可能造成程序崩溃 进一步的挑战: 如何让编译器精确匹配函数,但不进行实际的调用?(sizeof) 构造中的异常 构造函数抛出异常   构造过程立即停止   当前对象无法生成   析构函数不会被调用 ...

2018-06-26 00:33:00 114

转载 c++中的类型识别

基类指针指向子类对象 基类引用成为子类对象的别名 静态类型-变量(对象)自身的类型 动态类型-指针(引用)所指向对象的实际类型 基类指针是否可以强制类型转换为子类指针取决于动态类型! c++中如何得到动态类型? 解决方案-利用多态 1.在基类中定义虚函数返回具体的类型信息 2.所有的派生类都必须实现相关的虚函数 3.每个类中的类型虚函数都需要不同的实现...

2018-06-26 00:15:00 180

转载 c++中的异常处理

异常的概念 程序在运行过程中可能产生异常 异常(Exception)与Bug的区别   异常是程序运行时可预料的执行分支   Bug是程序中的错误,是不被预期的运行方式 异常(Exception)和Bug的对比 异常   运行时产生除0的情况   需要打开的外部文件不存在   数组访问时越界 Bug   使用野指针   堆数组使用后未释放   选择排序无法...

2018-06-23 00:30:00 107

转载 单例类模板

单例模式 需求的提出 在架构设计时,某些类在整个系统生命期中最多只能有一个对象存在(Single Instance) 如何定义一个类,使得这个类最多只能创建一个对象? 要控制类的对象数目,必须对外隐藏构造函数 思路: 将构造函数的访问属性设置为private 定义instance并初始化为NULL 当需要使用对象时,访问instance的值   空值:...

2018-06-22 23:49:00 92

转载 智能指针类模板

智能指针的意义 现代c++开发库中最重要的类模板之一 c++中自动内存管理的主要手段 能够在很大程度上避开内存相关的问题 STL中的智能指针auto_ptr   生命周期结束时,销毁指向的内存空间   不能指向堆数组,只能指向堆对象(变量)   一片堆空间只属于一个智能指针对象   多个智能指针对象不能指向同一片堆空间 STL中的其它智能指针 shared...

2018-06-22 23:28:00 106

转载 数组类模板

模板参数可以是数值型参数(非类型参数) template <typename T, int N> void func() {   T a[N];  //使用模板参数定义局部数组 } func<double, 10>(); 数值型模板参数的限制   变量不能作为模板参数   浮点数不能作为模板参数   类对象不能作为模板参数 本质...

2018-06-22 01:27:00 134

转载 类模板深度剖析

类模板可以定义任意多个不同的类型参数 类模板可以被特化   指定类模板的特定实现   部分类型参数必须显示指定   根据类型参数分开实现类模板 类模板的特化类型   部分特化-用特定规则约束类型参数   完全特化-完全显示指定类型参数 类模板特化注意事项   特化只是模板的分开实现     本质上是同一个类模板   特化类模板的使用方式是统一的 ...

2018-06-22 01:15:00 106

转载 深入理解函数模版

函数模版深入理解   编译器从函数模版通过具体类型产生不同的函数   编译器会对函数模版进行两次编译     对模版代码本身进行编译     对参数替换后的代码进行编译 注意事项:   函数模版本身不允许隐式类型转换     自动推导类型时,必须严格匹配     显示类型指定时,能够进行隐式类型转换 函数模版可以定义任意多个不同的类型参数 template...

2018-06-22 00:31:00 114

转载 函数模版的概念和意义

定义宏代码块 优点:代码复用,适合所有的类型 缺点:编译器不知道宏的存在,缺少类型检查 定义函数 优点:真正的函数调用,编译器对类型进行检查 缺点:根据类型重复定义函数,无法代码复用 c++中的泛型编程   函数模版     一种特殊的函数可用不同类型进行调用     看起来和普通函数很相似,区别是类型可被参数化     template<typename...

2018-06-22 00:13:00 220

转载 经典问题解析四

new关键字与malloc函数的区别 new关键字是c++的一部分 malloc是由c库提供的函数 new以具体类型为单位进行内存分配 malloc以字节为单位进行内存分配 new在申请内存空间时可进行初始化 malloc仅根据需要申请定量的内存空间 构造函数不可能成为虚函数   在构造函数执行结束后,虚函数表指针才会正确的初始化 析构函数可以成为虚函数   建...

2018-06-21 23:49:00 91

转载 被遗弃的多重继承

c++支持编写多重继承的代码 一个子类可以拥有多个父类 子类拥有所有父类的成员变量 子类继承所有父类的成员函数 子类对象可以当作任意父类对象使用 多重继承的问题一 通过多重继承得到的对象可能拥有“不同的地址”!! 解决方案:无 多重继承的问题二 多重继承可能产生冗余的成员 当多重继承关系出现闭合时将产生数据冗余的问题!!! 解决方案:虚继承 虚继...

2018-06-08 02:16:00 88

转载 c++中的抽象类和接口

面向对象中的抽象类 可用于表示现实世界中的抽象概念 是一种只能定义类型,而不能产生对象的类 只能被继承并重写相关函数 直接特征是相关函数没有完整的实现 c++语言中没有抽象类的概念 c++中通过纯虚函数实现抽象类 纯虚函数是指只定义原型的成员函数 一个c++类中存在纯虚函数就成为了抽象类 抽象类只能用作父类被继承 子类必须实现纯虚函数的具体功能 纯虚函数...

2018-06-08 01:35:00 122

转载 c++对象模型分析

class是一种特殊的struct 在内存中class依旧可以看作变量的集合 class与struct遵循相同的内存对齐规则 class中的成员函数与成员变量是分开存放的 每个对象有独立的成员变量 所有对象共享类中的成员函数 运行时的对象退化为结构体的形式 所有成员变量在内存中依次排布 成员变量间可能存在内存空隙 可以通过内存地址直接访问成员变量 ...

2018-06-08 01:19:00 123

转载 多态的概念和意义

函数重写回顾 父类中被重写的函数依然会继承给子类 子类中重写的函数将覆盖父类中的函数 通过作用域分辨符(::)可以访问到父类中的函数 面向对象中期望的行为 根据实际的对象类型判断如何调用重写函数 父类指针(引用)指向 父类对象则调用父类中定义的函数 子类对象则调用子类中定义的重写函数 面向对象中多态的概念 根据实际的对象类型决定函数调用的具体目标 同样的...

2018-06-08 00:51:00 306

转载 父子间的冲突

子类可以定义父类中的同名成员 子类中的成员将隐藏父类中的同名成员 父类中的同名成员依然存在于子类中 通过作用域分辨符(::)访问父类中的同名成员 c.Parent::mi 类中的成员函数可以进行重载 1.重载函数的本质为多个不同的函数 2.函数名和参数列表是唯一的标识 3.函数重载必须发生在同一个作用域中 子类中的函数将隐藏父类的同名函数 子类无法重载父类中...

2018-06-08 00:34:00 124

转载 继承

重要规则: 子类就是一个特殊的父类 子类对象可以直接初始化父类对象 子类对象可以直接赋值给父类对象 继承中的访问级别 面向对象中的访问级别不只是public和private 可以定义protected访问级别 关键字protected的意义 修饰的成员不能被外界直接访问 修饰的成员可以被子类直接访问 不同的继承方式 c++中支持三种不同的继承方式 pu...

2018-05-31 23:55:00 87

转载 类型转换函数

标准数据类型之间会进行隐式的类型安全转换 转换规则如下 char ->short char/short ->int ->unsigned int -> long ->unsigned long ->float ->double char+short -> int 再论构造函数 构造函数可以定义不同类型的参数 参数满足下列...

2018-05-30 01:27:00 187

转载 经典问题解析三

编译器为每个类默认重载了赋值操作符 默认的赋值操作符仅完成浅拷贝 当需要进行深拷贝时必须重载赋值操作符 赋值操作符与拷贝构造函数有相同的存在意义 Test& operator = (const Test& obj) {   if (this != obj)   {     delete m_pointer;     m_pointer = new ...

2018-05-29 01:01:00 80

转载 函数调用操作符

函数调用操作符( ( ) ) 只能通过类的成员函数重载 可以定义不同参数的多个重载函数 函数对象用于在工程中取代函数指针 int operator () () {   int ret = a1;   a1 = a0 + a1;   a0 = ret;   return ret; } Test t; t(); 转载于:https://www.cnblo...

2018-05-29 00:42:00 742

转载 数组操作符的重载

数组访问操作符( [ ] ) 只能通过类的成员函数重载 重载函数能且仅能使用一个参数 可以定义不同参数的多个重载函数 转载于:https://www.cnblogs.com/sugarWill666/p/9103061.html...

2018-05-29 00:31:00 111

转载 c++中的字符串类

字符串与数字的转换 标准库中提供了相关的类对字符串和数字进行转换 字符串流类(sstream)用于string的转换 <sstream>-相关头文件 istringstream-字符串输入流 ostringstream-字符串输出流 使用方法 string -> 数字 istringstream iss("123.45"); double num...

2018-05-29 00:23:00 83

转载 初探c++标准库

c++标准库 c++标准库并不是c++语言的一部分 c++标准库是由类库和函数库组成的集合 c++标准库中定义的类和对象都位于std命名空间中 c++标准库的头文件都不带.h后缀 c++标准库涵盖了c库的功能 小结 c++标准库是由类库和函数库组成的集合 c++标准库包含经典算法和数据结构的实现 c++标准库涵盖了c库的功能 c++标准库位于std命名空间中 ...

2018-05-23 00:34:00 114

转载 操作符重载的概念

操作符重载 c++中的重载能够扩展操作符的功能 操作符的重载以函数的方式进行 本质: 用特殊形式的函数扩展操作符的功能 通过operator关键字可以定义特殊的函数 operator的本质是通过函数重载操作符 语法: Type operator Sign(const Type p1, const Type p2) {   Type ret;   return ...

2018-05-23 00:17:00 152

转载 类中的函数重载

函数重载回顾 函数重载的本质为相互独立的不同函数 c++中通过函数名和函数参数确定函数调用 无法直接通过函数名得到重载函数的入口地址 函数重载必然发生在同一个作用域中 类中的成员函数可以进行重载 构造函数的重载 普通成员函数的重载 静态成员函数的重载 问题: 全局函数,普通成员函数以及静态成员函数之间是否可以构成重载? 作用域不一样,不可以。 普通成员函数以...

2018-05-23 00:00:00 106

转载 友元的尴尬能力

友元的概念 友元是c++中的一种关系 友元关系发生在函数与类之间或者类与类之间 友元关系时单项的,不能传递 友元的函数 在类中以friend关键字声明友元 类的友元可以是其它类或者具体函数 友元不是类的一部分 友元不受类中访问级别的限制 友元可以直接访问具体类的所有成员 友元是为了兼顾c语言的高效而诞生的 友元直接破坏了面向对象的封装性 友元在实际产品...

2018-05-22 22:48:00 65

转载 二阶构造模式

构造函数 只提供自动初始化成员变量的机会 不能保证初始化逻辑一定成功 执行return语句后构造函数立即结束 半成品对象的概念 初始化操作不能按照预期完成而得到的对象 半成品对象是合法的c++对象,也是Bug的重要来源 二阶构造示例一 class TwoPhaseCons { private:   TwoPhaseCons() {  //第一阶段构造函数 ...

2018-05-22 22:29:00 77

转载 类的静态成员函数

在c++中可以定义静态成员函数 静态成员函数是类中特殊的成员函数 静态成员函数属于整个类所有 可以通过类名直接访问公有静态成员函数 可以通过对象名访问公有静态成员函数 小结 静态成员函数时类中特殊的成员函数 静态成员函数没有隐藏的this参数 静态成员函数成员函数可以通过类名直接访问 静态成员函数只能直接访问静态成员变量(函数) 转载于:https://www....

2018-05-22 22:07:00 77

转载 类的静态成员变量

在c++中可以定义静态成员变量 静态成员变量属于整个类所有 静态成员变量的生命周期不依赖于任何对象 可以通过类名直接访问公有静态成员变量 所有对象共享类的静态成员变量 可以通过对象名访问公有静态成员变量 静态成员变量 静态成员变量的特性 在定义时直接通过static关键字修饰 静态成员变量需要在类外单独分配空间(类外定义) 静态成员变量在程序内部位于全局数据区 ...

2018-05-22 21:54:00 107

转载 经典问题解析2

关于析构的疑问 单个对象创建时构造函数的调用顺序 1.调用父类的构造过程 2.调用成员变量的构造函数(调用顺序与声明顺序相同) 3.调用类自身的构造函数 析构函数与对应构造函数的调用顺序相反。 关于析构的答案 对于栈对象和全局对象,类似于入栈与出栈的顺序,最后构造的对象最先析构!! 堆对象的析构发生在使用delete的时候,与delete的使用顺序相关! 关...

2018-05-22 01:43:00 88

转载 神秘的临时对象

思考 构造函数是一个特殊的函数 是否可以直接调用? 是否可以在构造函数中调用构造函数? 直接调用构造函数的行为是什么? 答案 直接调用构造函数将产生一个临时对象 临时对象的生命周期只有一条语句的时间 临时对象的作用域只在一条语句中 临时对象是c++中值得警惕的灰色地带 小结 直接调用构造函数将产生一个临时对象 临时对象时性能的瓶颈,也是bug的来源之一 现...

2018-05-22 01:23:00 75

转载 对象的构造顺序

对于局部对象 当程序执行流到达对象的定义语句时进行构造 对于堆对象 当程序执行流到达new语句时创建对象 使用new创建对象将自动触发构造函数的调用 对于全局对象 对象的构造顺序是不确定的 不同的编译器使用不同的规则确定构造顺序 转载于:https://www.cnblogs.com/sugarWill666/p/9070140.html...

2018-05-22 01:06:00 86

转载 初始化列表的使用

类成员的初始化 注意事项 成员的初始化顺序与成员的声明顺序相同 成员的初始化顺序与初始化列表中的位置无关 初始化列表先于构造函数的函数体执行 类中的const成员 类中的const成员会被分配空间的 类中的const成员的本质是只读变量 类中的const成员只能在初始化列表中指定初始值 编译器无法直接得到const成员的初始值,因此无法进入符号表成为真正意义上的常...

2018-05-22 00:51:00 242

转载 对象的构造

对象的初始化 从程序设计的角度,对象只是变量,因此: 在栈上创建对象时,成员变量初始为随机值 在堆上创建对象时,成员变量初始为随机值 在静态存储区创建对象时,成员变量初始为0值 小结 每个对象在使用之前都应该初始化 类的构造函数用于对象的初始化 构造函数与类同名并且没有返回值 构造函数在对象定义时自动被调用 带有参数的构造函数   构造函数可以根据需要定...

2018-05-20 20:50:00 80

转载 类的真正形态

类的关键字 struct在c语言中已经有了自己的含义,必须继续兼容 在c++中提供了新的关键字class用于类定义 class和struct的用法时完全相同的 class和struct有什么区别? 在用struct定义类时,所有成员的默认访问级别为public 在用class定义类时,所有成员的默认访问级别为private 转载于:https://www.cnblog...

2018-05-20 20:22:00 76

转载 类与封装的概念

类通常分为以下两个部分   类的实现细节   类的使用方式 类的封装 当使用类是,不需要关心其实现细节 当创建类时,才需要考虑其内部实现细节 c++中类的封装 成员变量:c++中用于表示类属性的变量 成员函数:c++中用于表示类行为的函数 c++中可以给成员变量和成员函数定义访问级别   public   成员变量和成员函数可以在类的内部和外界访问和调用...

2018-05-20 18:54:00 152

转载 进阶面向对象下

类之间的基本关系 继承   从已存在类细分出来的类和原类之间具有继承关系(is-a)   继承的类(子类)拥有原类(父类)的所有属性和行为 组合   一些类的存在必须依赖于其它的类,这种关系叫组合   组合的类在某一局部上由其它的类组成 小结 类之间可以存在继承关系或组合关系 继承关系中子类拥有父类的的一切属性和行为 组合关系是类之间整体和部分的关系 类及类之...

2018-05-20 18:40:00 70

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除