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

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

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

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

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

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

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

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

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

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

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

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

【C++】 34_数组操作符的重载

2018-12-27
阅读 4 分钟
1.1k
问题:string 类对象还具备 C 方式字符串的灵活性吗?还能直接访问单个字符吗? 字符串类的兼容性 string 类最大限度的考虑了 C 字符串的兼容性 可以按照使用 C 字符串的方式使用 string 编程实验: 用 C 方式使用 string 类 {代码...} {代码...} 问题:类的对象怎么支持数组的下标访问呢? 重载数组访问操作符 被忽略的...

【C++】 33_C++中的字符串类

2018-12-26
阅读 4 分钟
1.5k
历史遗留问题 C 语言不支持真正意义上的字符串 C 语言用字符数组和一组函数实现字符串操作 C 语言不支持自定义类型,因此无法获得字符串类型 解决方案 从 C 到 C++ 的进化过程中引入了自定义类型 在 C++ 中可以通过类完成字符串类型的定义 问题:C++ 中原生类型系统是否包含字符串类型呢? 标准库中的字符串类 C++ 语言...

【C++】 32_初探 C++ 标准库

2018-12-26
阅读 3 分钟
1.6k
操作符 << 的原生意义是按位左移: 1 << 2;其意义是将整数 1 按位左移 2 位,即: 0000 0001 ==> 0000 0100

【C++】 31_完善的复数类

2018-12-26
阅读 3 分钟
2k
完善的复数类 复数类应该具有的操作 运算: +, -, *, / 比较: ==, != 赋值: = 求模: modulus 利用操作符重载 统一复数与实数的运算方式 统一复数与实数的比较方式 {代码...} 编程实验: 复数类的实现 Complex.h {代码...} Complex.cpp {代码...} main.cpp {代码...} {代码...} 注意事项 C++ 规定赋值操作符(=)只能...

【C++】 30_操作符重载的概念

2018-12-25
阅读 3 分钟
1.2k
思考:Add 函数可以解决 Complex 对象相加的问题, 但是 Complex 是现实世界中确实存在的复数,并且复数在数学运算中的地位和普通的实数相同。

【C++】 29_类中的函数重载

2018-12-25
阅读 2 分钟
1.5k
函数重载的本质为互相独立的不同函数 C++ 中通过函数名和参数列表确定函数调用 无法直接通过函数名得到重载函数的入口地址 函数重载必然发生在同一个作用域中

【C++】 28_友元的尴尬能力

2018-12-25
阅读 3 分钟
1.1k
在类中以 friend 关键字声明友元 类的友元可以是其它类或者具体函数 友元不是类的一部分 友元不受类中访问级别的限制 友元可以直接访问具体类的所有成员

【C++】 27_二阶构造模式

2018-12-25
阅读 6 分钟
1.6k
构造函数的回顾 关于构造函数 类的构造函数用于对象的初始化 构造函数与类同名并且没有返回值 构造函数在对象定义时自动被调用 问题 如何判断构造函数的执行结果? 在构造函数中执行 return 语句会发生什么? 构造函数执行结束是否意味着对象构造成功? 答: 无法判断 构造函数立即返回结束 构造函数执行结束并不意味着...

【C++】 26_类的静态成员函数

2018-12-25
阅读 3 分钟
1.3k
在 C++ 中可以定义静态成员函数 静态成员函数是类中特殊的成员函数 静态成员函数属于整个类所有 可以通过类名直接访问公有静态成员函数 可以通过对象名访问公有静态成员函数 不隐含 this 指针 不能访问普通成员变量(函数),可以访问静态成员变量(函数)

【C++】 25_类的静态成员变量

2018-12-25
阅读 2 分钟
1.4k
在 C++ 中可以定义静态成员变量 静态成员变量属于整个类所有 静态成员变量的生命期不依赖于任何对象(与程序的运行期相同) 可以通过类名直接访问公有静态成员变量 所有对象共享类的静态成员变量 可以通过对象名访问公有静态成员变量

【C++】 24_经典问题解析 二

2018-12-24
阅读 3 分钟
1.5k
单个对象创建时构造函数的调用顺序 调用父类的构造过程(后继课程中讲解) 调用成员变量的构造函数(调用顺序与声明顺序相同) 调用类自身的构造函数

【C++】 23_神秘的临时对象

2018-12-24
阅读 3 分钟
2.6k
有趣的问题 下面的程序输出什么?为什么? {代码...} ==> {代码...} 实例分析: 有趣的问题 {代码...} {代码...} 发生了什么 程序意图 : 【代码复用】 在 Test() 中以 0 作为参数调用 Test(int i) 将成员变量 mi 的初始值设置为 0 运行结果 成员变量 mi 的值为随机值 究竟哪个地方出了问题? 思考 构造函数是一个特殊...

【C++】 22_对象的销毁

2018-12-24
阅读 3 分钟
3.8k
一般而言,需要销毁的对象都应该做清理 解决方案 为每个类提供一个 public 的 free 函数 对象不再需要时调用 free 函数进行清理

【C++】 21_对象的构造顺序

2018-12-24
阅读 4 分钟
1.1k
问题 1:C++ 中的类可以定义多个对象,那么对象构造的顺序是怎样的? 问题 2:对象构造顺序会带来什么影响呢? {代码...} 对象的构造顺序 一 对于局部对象(包含静态局部对象) 当程序执行流到达对象的定义语句时进行构造 下面程序中的对象构造顺序是什么? {代码...} 实例分析: 局部对象的构造顺序 test_1.cpp {代码.....

【C++】 20_初始化列表的使用

2018-12-24
阅读 2 分钟
2.1k
问题:类中是否可以定义 const 成员? 小实验 下面的类定义是否合法?如果合法, ci的值是什么,存储在哪里? {代码...} 编程实验: 类中的 const 成员 {代码...} {代码...} 类成员的初始化 C++ 中提供了初始化列表对成员变量进行初始化 语法规则 {代码...} 注意事项 成员的初始化顺序与成员的声明顺序相同 成员的初始化...

【C++】 19_对象的构造 (下)

2018-12-22
阅读 7 分钟
1.3k
无参构造函数 当类中没有定义构造函数时,编译器提供一个无参构造函数,并且函数体为空 拷贝构造函数 当类中没有定义拷贝构造函数时,编译器默认提供一个拷贝构造函数,简单的进行成员变量的值复制

【C++】 18_对象的构造 (中)

2018-12-22
阅读 3 分钟
1k
构造函数 带有参数的构造函数 构造函数可以根据需要定义参数 一个类中可以存在多个重载的构造函数 构造函数的重载遵循 C++ 重载规则 {代码...} 友情提示 对象定义和对象声明不同 对象定义 - 申请对象的空间并调用构造函数 对象声明 - 告诉编译器存在这样一个对象 {代码...} 构造函数的自动调用 {代码...} 编程实验: 带...

【C++】 17_对象的构造 (上)

2018-12-21
阅读 3 分钟
1.3k
从程序设计的角度,对象只是变量,因此: 在栈上创建对象时,成员变量初始值为随机值 在堆上创建对象时,成员变量初始值为随机值 在静态存储区创建对象时,成员变量初始值为 0

【C++】 16_类的真正形态

2018-12-21
阅读 3 分钟
1.2k
struct 在 C 语言中已经有了自己的含义,必须继续兼容 在 C++ 中提供了新的关键字 class 用于类定义 class 和 struct 的用法是完全相同的

【C++】 15_类于封装的概念

2018-12-21
阅读 3 分钟
1.6k
类的组合 电脑一般而言是由 CPU, 内存,主板,键盘和硬盘等部件组合而成。 思考: 学习电脑组装需要多少时间? 学习电脑组装是否需要学习显示器,键盘,鼠标,主板,内存等部件的设计与制造? 类的封装 类通常分为以下两个部分 类的实现细节 类的使用方式 当使用类时,不需要关心其实现细节 当创建类时,才需要考虑其内部...

【C++】 14_进阶面向对象 (下)

2018-12-21
阅读 2 分钟
1.1k
类之间的基本关系 继承 从已存在类细分出来的类和原类之间具有继承关系(is_a) 继承的类(子类)拥有原类(父类)的所有属性和行为 组合 一些类的存在必然依赖于其它的类,这种关系叫组合 组合的类在某一局部上由其它的类组成

【C++】 13_进阶面向对象 (上)

2018-12-21
阅读 1 分钟
1.2k
面向对象的意义在于 将日常生活中习惯的思维方式引入程序设计中 将需求中的概念直观的映射到解决方案中 以模块为中心构建可复用的软件系统 提高软件产品的可维护性和可扩展性

【C++】 12_经典问题解析 一

2018-12-20
阅读 3 分钟
1.4k
const 常量的判别标准 只有用字面量初始化的 const 常量才会进入符号表 使用其它变量初始化的 const 常量仍然只是只读变量 被 volatile 修饰的 const 常量不会进入符号表

【C++】 11_新型的类型转换

2018-12-20
阅读 3 分钟
2.8k
强制类型转换 C 方式的强制类型转换 ( Type )( Expression ) Type( Expression ) 编程实验: 粗暴的类型转换 {代码...} {代码...} C 方式强制类型转换存在的问题 过于粗暴 {代码...} 难于定位 {代码...} 问题:强制类型转换在实际工程中是很完全难避免的!如何进行更加安全可靠的转换呢? 新型类型转换 C++ 将强制类型转...