【C++】 64_C++中的异常处理 (上)

2019-01-04
阅读 3 分钟
1.4k
C++ 内置了异常处理的语法元素 try ... catch ... try 语句处理正常逻辑代码 catch 语句处理异常逻辑代码 try 语句中的异常由对应的 catch 语句处理

【C++】 63_C语言异常处理

2019-01-03
阅读 3 分钟
1.5k
程序在运行过程中可能产生异常 异常( Exception ) 与 Bug 的区别 异常是程序运行时可预料的执行分支 Bug 是程序中的错误,是不被预期的运行方式

【C++】 62_单例类模板

2019-01-03
阅读 3 分钟
1.9k
要控制类的对象数目,必须对外隐藏构造函数 思路: 将构造函数的访问属性设置为 private 定义 instance 并初始化为 NULL 当使用对象时,访问 instance 的值 空值: 创建对象,并用 instance 标记 非空值: 返回 instance 标记的对象

【C++】 61_智能指针类模板

2019-01-03
阅读 5 分钟
1.5k
生命周期结束时,销毁指向的内存(防止内存泄漏) 不能指向堆数组,只能指向堆对象(变量) 一片堆空间只属于一个智能指针对象(防止内存多次释放) 多个智能指针对象不能指向同一片堆空间

【C++】 60_数组类模板

2019-01-03
阅读 5 分钟
2.5k
预备知识 模板参数可以是数值型参数(非类型参数) {代码...} {代码...} 数值型模板参数的限制 变量不能作为模板参数 浮点数不能作为模板参数 类对象不能作为模板参数 ...... 本质:模板参数是在编译阶段被处理的单元,因此,在编译阶段必须准确无误的唯一确定。 有趣的面试题:用你觉得最高效的方法求 1 + 2 + 3 + ... ...

【C++】 59_类模板深度剖析

2019-01-03
阅读 4 分钟
1.2k
多参数类模板 类模板可以定义任意多个不同的类型参数 {代码...} ==> {代码...} 类模板可以被特化 指定类模板的特定实现 部分类型参数必须显示指定 根据类型参数分开实现类模板 类模板的特化类型 部分特化 - 用特定规则约束类型参数 完全特化 - 完全显示指定类型参数 {代码...} 部分特化 ==> {代码...} 完全特化 ==...

【C++】 58_类模板的概念和意义

2019-01-02
阅读 4 分钟
1.6k
C++ 中的类模板 以相同的方式处理不同的类型 在类声明前使用 template 进行标识 < typename T > 用于说明类中使用的泛指类型 T

【C++】 57_深入理解函数模板

2019-01-02
阅读 5 分钟
1.3k
深入理解函数模板 编译器从函数模板通过具体类型产生不同的函数 编译器会对函数模板进行两次编译 对模板代码本身进行编译(语法检查等) 对参数替换后的代码进行编译(语法检查等)

【C++】 56_函数模板的概念和意义

2019-01-02
阅读 3 分钟
1.3k
定义宏代码块 优点: 代码复用,适合所有的类型 缺点:编译器不知道宏的存在,缺少类型检查 定义函数 优点: 真正的函数调用,编译器对类型进行检查 缺点: 根据类型重复定义函数,无法代码复用

【C++】 55_经典问题分析 四

2019-01-02
阅读 5 分钟
1.4k
new 关键字和 malloc 函数的区别new 关键字是 C++ 的一部分malloc 是 C 库提供的函数new 以具体类型为单位进行内存分配malloc 以字节为单位进行内存分配new 在申请内存空间时可进行初始化malloc 仅根据需要申请定量的内存空间

【C++】 54_被遗弃的多重继承 (下)

2019-01-01
阅读 4 分钟
1.8k
多重继承问题 三 多重继承可能产生多个虚函数表 编程实验: 多重继承问题 三 {代码...} {代码...} {代码...} 类 BaseA 与 类 BaseB 定义的成员结构相同,那么生成的虚函数表结构也将相同; funcA() 与 funcB() 是虚函数,那么函数的调用将通过虚函数表指针完成; BaseB* pbe = (BaseB*)pa; ==> C 方式的强制类型转换...

【C++】 53_被遗弃的多重继承 (上)

2019-01-01
阅读 5 分钟
2.1k
C++ 支持编写多重继承的代码 一个子类可以拥有多个父类 子类拥有所有父类的成员变量 子类继承所有父类的成员函数 子类对象可以当作任意父类对象使用

【C++】 52_C++中的抽象类和接口

2019-01-01
阅读 2 分钟
3.3k
什么是抽象类? 面向对象中的抽象概念 在进行面向对象分析时,会发现一些抽象的概念! 图形的面积如何计算? 在现实中需要知道具体的图形类型才能求面积,所以对概念上的”图形“求面积是没有意义的! {代码...} Shape 只是一个概念上的类型,没有具体对象! 问: Shape 类有必要存在有答:有。现实世界中存在图形概念 面向...

【C++】 51_C++对象模型分析 (下)

2018-12-31
阅读 8 分钟
1.3k
C++ 多态的实现原理 当类中声明虚函数时,编译器会在类中生成一个虚函数表 虚函数表是一个存储成员函数地址的数据结构 虚函数表由编译器自动生成与维护 virtual 成员函数被编译器放入虚函数表中 存在虚函数时,每个对象都有一个指向虚函数表的指针

【C++】 50_C++对象模型分析(上)

2018-12-31
阅读 4 分钟
1.4k
class 是一种特殊的 struct 在内存中 class 依旧可以看作变量的集合 class 与 struct 遵循相同的内存对齐规则 class 中的成员函数与成员变量是分开存放的 每个对象有独立的成员变量【栈空间、堆空间、全局数据区】 所有对象共享类的成员函数【代码段】

【C++】 49_多态的概念和意义

2018-12-31
阅读 4 分钟
2.3k
面向对象中期望的行为 根据实际的对象类型判断如何调用重写函数 父类指针( 引用 )指向 父类对象则调用父类中定义的函数 子类对象则调用子类中定义的函数

【C++】 48_同名覆盖引发的问题

2018-12-30
阅读 3 分钟
3.3k
子类对象可以当作父类对象使用(兼容性) 子类对象可以直接赋值给父类对象 子类对象可以直接初始化父类对象 父类指针可以直接指向子类对象 父类引用可以直接引用子类对象

【C++】 47_父子间的冲突

2018-12-30
阅读 4 分钟
1.7k
子类可以定义父类中的同名成员【位于不同作用域中】 子类中的成员将隐藏父类中的同名成员 父类中的同名成员依然存在于子类中 通过作用域分边符(::)访问父类中的同名成员

【C++】 46_继承中的构造与析构

2018-12-30
阅读 4 分钟
1.2k
子类对象可以定义构造函数 子类构造函数 必须对继承而来的成员进行初始化 直接通过初始化列表或者赋值的方式进行初始化 调用父类构造函数进行初始化

【C++】 45_不同的继承方式

2018-12-30
阅读 5 分钟
1.1k
C++ 中支持三种不同的继承方式 public 继承 父类成员在子类中保持原有的访问级别 private 继承 父类成员在子类中变为私有继承 protected 继承 父类中的公有成员变为保护成员,其它成员保持不变

【C++】 44_继承中的访问级别

2018-12-29
阅读 4 分钟
1.3k
值得思考的问题 子类是否可以直接访问父类的私有成员呢? 思考过程 根据面向对象理论: 根据C++ 语法: 编程实验: 继承中的访问级别 {代码...} {代码...} 继承中的访问级别 面向对象中的访问级别不只是 public 和 private 可以定义 protected 访问级别 关键字 protected 的意义 修饰的成员不能被外界直接访问 修饰的成员...

【C++】 43_继承的概念和意义

2018-12-29
阅读 5 分钟
1.4k
思考:类之间是否存在直接的关联关系呢? 生活中的例子 组合关系: 整体与部分的关系 实例分析: 组合关系的描述 {代码...} {代码...} 类之间的组合关系 组合关系的特点 将其它类的对象最为当前类的成员使用 当前类的对象与成员对象的生命期相同 成员对象在用法上与普通对象完全一致 生活中的例子 继承关系: 父子关系 ...

【C++】 42_类型转换函数 (下)

2018-12-29
阅读 3 分钟
1.6k
问题:类类型是否能够类型转换到普通类型呢? {代码...} {代码...} 类型转换函数 C++ 类可以定义类型转换函数 类型转换函数用于将类对象转换为其它类型 语法规则: {代码...} 编程实验: 类型转换函数初探 {代码...} {代码...} 编译器的行为 编译器会尽力尝试让源码通过编译 t 这个对象为 Test 类型,怎么可能用于初始化...

【C++】 41_类型转换函数 (上)

2018-12-29
阅读 4 分钟
1.1k
分析 1:cout << "ui + i = " << ui + i << endl;if( (ui + i) > 0 ) {}

【C++】 40_前置操作符和后置操作符

2018-12-28
阅读 5 分钟
1.2k
值得思考的问题 下面的代码有没有区别?为什么? {代码...} 编程实验: 真的有区别吗? {代码...} vc++ 2010 汇编 {代码...} g++ 汇编 {代码...} 对于基础数据类型,在工程上没有任何区别。由于实例中没有使用返回值,经过编译器优化后,生成相同的汇编代码。 意想不到的事实 现代编译器产品会对代码进行优化 优化使得最...

【C++】 39_逗号操作符分析

2018-12-28
阅读 3 分钟
1.1k
逗号操作符( , ) 可以构成逗号表达式 逗号表达式用于将多个子表达式连接为一个表达式 逗号表达式的值为最后一个表达式的值 逗号表达式中的前 N-1 个子表达式可以没有返回值 逗号表达式按照从左向右的顺序计算每个子表达式的值

【C++】 38_逻辑操作符的陷阱

2018-12-28
阅读 3 分钟
1.4k
逻辑运算符的原生语义 操作符只有两种值 ( true 和 false ) 逻辑表达式不用完全计算就能确定最终值 ( 短路法则 ) 最终结果只能是 true 或 false

【C++】 37_智能指针分析

2018-12-28
阅读 2 分钟
1.2k
我们需要什么 需要一个特殊的指针 指针生命周期结束时主动释放堆空间 一块堆空间最多只能由一个指针表示(避免内存多次释放) 杜绝指针运算和指针比较(避免越界造成野指针)

【C++】 36_经典问题解析 三

2018-12-27
阅读 7 分钟
1.6k
编译器为每个类默认重载了赋值操作符 默认的赋值操作符仅完成浅拷贝 当需要进行深拷贝时必须重载赋值操作符 赋值操作符与拷贝构造函数有相同的存在意义

【C++】 35_函数对象分析

2018-12-27
阅读 2 分钟
1.3k
函数一旦开始调用就无法重来 静态局部变量处于函数内部,外部无法改变 函数为全局函数,是唯一的,无法多次独立使用 无法指定某个具体的数列项作为初始值