C++深度剖析
YLC_慕类
知行合一
展开
-
C++笔记 外传篇3 动态内存申请的结果
外传篇3 动态内存申请的结果1.问题:动态内存申请一定成功吗?不一定常见的动态内存分配代码必须知道的事实!malloc函数申请失败时返回NULL值new关键字申请失败时(根据编译器的不同)返回NULL值抛出std::bad_alloc异常2.问题:new语句中的异常是怎么抛出来的?new关键字在C++规范中的标准行为在堆空间申请足够大的内存成功:在获取的空间中调用构造函数...原创 2018-12-01 10:16:43 · 206 阅读 · 0 评论 -
a function-definition is not allowed here before ‘{’ token
出现错误:a function-definition is not allowed here before ‘{’ token解释:不能在一个函数中定义另一个函数错误原因:main函数 } 误删导致的原创 2018-12-28 19:43:58 · 86193 阅读 · 9 评论 -
c++中的冒号(:)和双冒号(::)运算符
一、冒号(:)用法(1)表示机构内位域的定义(即该变量占几个bit空间)1 typedef struct _XXX{23 unsigned char a:4;45 unsigned char c;67 } XXX;(2)构造函数后面的冒号起分割作用,是类给成员变量赋值的方法,初始化列表,更适用于成员变量的常量const型。1 struct _XXX{2 3 _XXX() :...转载 2018-12-24 10:36:55 · 1469 阅读 · 0 评论 -
C++笔记 第四十八课 同名覆盖引发的问题---狄泰学院
如果在阅读过程中发现有错误,望评论指正,希望大家一起学习,一起进步。学习C++编译环境:Linux第四十八课 同名覆盖引发的问题1.父子间的赋值兼容子类对象可以当做父类对象使用(兼容性)子类对象可以直接赋值给父类对象子类对象可以直接初始化父类对象父类指针可以直接指向子类对象父类引用可以直接引用子类对象48-1 子类对象的兼容性#include <iostream>...原创 2018-11-27 22:02:57 · 134 阅读 · 0 评论 -
C++笔记 第四十九课 多态的概念和意义---狄泰学院
如果在阅读过程中发现有错误,望评论指正,希望大家一起学习,一起进步。学习C++编译环境:Linux第四十九课 多态的概念和意义1.函数重写回顾父类中被重写的函数依然会继承给子类子类中重写的函数将覆盖父类中的函数通过作用域分辨符(::)可以访问到父类中的函数2.多态的概念和意义面向对象中期望的行为根据实际的对象类型盘算如何调用重写函数父类指针(引用)指向父类对象则调用父类中定...原创 2018-11-29 20:40:59 · 165 阅读 · 0 评论 -
C++笔记 第四课 布尔类型和引用---狄泰学院
如果在阅读过程中发现有错误,望评论指正,希望大家一起学习,一起进步。学习C++编译环境:Linux第四课 布尔类型和引用1.布尔类型C++中的布尔类型C++中的C语言的基本类型系统之上增加了boolC++中的bool可取的值只有true和false理论上bool只占用一个字节注意:true代表真值,编译器内部用1来表示false代表非真值,编译器内部用0来表示2.布尔类型的值...原创 2018-10-18 20:44:39 · 227 阅读 · 3 评论 -
C++笔记 第十一课 新型的类型转换---狄泰学院
如果在阅读过程中发现有错误,望评论指正,希望大家一起学习,一起进步。学习C++编译环境:Linux第十一课 新型的类型转换1.强制类型转换C方式的强制类型转换(Type)(Expression)Type (Expression)—老式类型11-1 粗暴的类型转换#include &lt;stdio.h&gt;typedef void(PF)(int);struct Point...原创 2018-10-24 11:19:32 · 231 阅读 · 2 评论 -
C++笔记 第十二课 经典问题解析一---狄泰学院
第十二课 经典问题解析一1.关于const的疑问const什么时候是只读变量?什么时候是常量?const常量的判断准则只有用字面量初始化的const常量才会进入符号表—真正意义上的常量使用其他变量初始化的const常量仍然是只读变量—只读变量被volatile修饰的const常量不会进入符号表(外部:多线程、中断)—只读变量在编译期间不能直接确认初始值的const标识符,都被作为只读...原创 2018-10-24 11:28:23 · 199 阅读 · 0 评论 -
C++笔记 第十五课 类与封装的概念---狄泰学院
如果在阅读过程中发现有错误,望评论指正,希望大家一起学习,一起进步。学习C++编译环境:Linux第十五课 类与封装的概念1.类的组合电脑一般而言是由CPU,内存,主板,键盘和硬盘等部件组合而成。思考1.学习电脑组装需要多少时间?几个月2.学习电脑组装是否需要学习显示器,键盘,鼠标,主板,内存等部件的设计与制造?否2.类的封装类通常分为以下两个部分类的实现细节类的使用方式...原创 2018-10-30 10:31:46 · 226 阅读 · 0 评论 -
C++笔记 第十六课 类的真正形态---狄泰学院
如果在阅读过程中发现有错误,望评论指正,希望大家一起学习,一起进步。学习C++编译环境:Linux第十六课 类的真正形态问题:经过不停的改进,结构体struct变得越来越不像它在C语言中的样子!!!1.类的关键字struct在C语言中已经有了自己的含义,必须继续兼容在C++中提供了新的关键字class用于类定义class和struct的用法是完全相同的class和struct有什么...原创 2018-10-30 10:39:09 · 257 阅读 · 0 评论 -
C++笔记 第二十一课 对象的构造顺序---狄泰学院
如果在阅读过程中发现有错误,望评论指正,希望大家一起学习,一起进步。学习C++编译环境:Linux第二十一课 对象的构造顺序问题:C++中的类可以定义多个对象,那么对象构造的顺序是怎样的?1.对象的构造顺序一对于 局部对象当程序执行流到达对象的定义语句时进行构造,对象定义->构造下面程序中的对象构造顺序是什么?21-1 局部对象的构造顺序#include <stdi...原创 2018-11-03 10:36:41 · 144 阅读 · 0 评论 -
C++笔记 第二十二课 对象的销毁---狄泰学院
如果在阅读过程中发现有错误,望评论指正,希望大家一起学习,一起进步。学习C++编译环境:Linux第二十二课 对象的销毁1.对象的销毁生活中的对象都是被初始化后才上市的生活中的对象被销毁前会做一些清理工作问题:C++中如何清理需要销毁的对象一般而言,需要销毁的对象都应该做清理解决方案为每个类都提供一个public的free函数对象不再需要时立即调用free函数进行清理mai...原创 2018-11-03 10:40:01 · 223 阅读 · 0 评论 -
C++笔记 第二十五课 类的静态成员变量---狄泰学院
如果在阅读过程中发现有错误,望评论指正,希望大家一起学习,一起进步。学习C++编译环境:Linux第二十五课 类的静态成员变量1.成员变量的回顾通过对象名能够访问public成员变量每个对象的成员变量都是专属的成员变量不能在对象之间共享2.新的需求统计在程序运行期间某个类的对象数目保证程序的安全性(不能使用全局变量)随时可以获取当前对象的数目25-1 解决方案的尝试3.静态...原创 2018-11-06 08:45:26 · 161 阅读 · 0 评论 -
C++笔记 第二十六课 类的静态成员函数---狄泰学院
如果在阅读过程中发现有错误,望评论指正,希望大家一起学习,一起进步。学习C++编译环境:Linux第二十六课 类的静态成员函数1.未完成的需求统计在程序运行期间某个类的对象数目保证程序的安全性(不能使用全局变量)随时可以获取当前对象的数目(Failure)26-1 解决方案的尝试#include &lt;stdio.h&gt;class Test{public: st...原创 2018-11-06 08:52:30 · 222 阅读 · 0 评论 -
C++笔记 第十七课 对象的构造(上)---狄泰学院
如果在阅读过程中发现有错误,望评论指正,希望大家一起学习,一起进步。学习C++编译环境:Linux第十七课 对象的构造(上)问题:对象中成员变量的初始值是多少?不定的小实验下面的类定义中成员变量i和j的初始值为什么?17-1 成员变量的初始值#include <stdio.h>class Test{private: int i; int j;pu...原创 2018-11-01 21:59:26 · 761 阅读 · 0 评论 -
C++笔记 第十四课 进阶面向对象(下)---狄泰学院
如果在阅读过程中发现有错误,望评论指正,希望大家一起学习,一起进步。学习C++编译环境:Linux第十四课 进阶面向对象(下)1.面向对象基本概念类之间的基本关系继承从已存在类细分出来的类和原类之间具有继承关系(is-a)继承的类(子类)拥有原类(父类)的所有属性和行为组合一些类的存在必须依赖于其它的类,这种关系叫组合组合的类在某一局部上由其它的类组成类之间的基本关系-继承...原创 2018-10-26 22:44:55 · 177 阅读 · 0 评论 -
C++笔记 第十三课进阶面向对象(上)---狄泰学院
如果在阅读过程中发现有错误,望评论指正,希望大家一起学习,一起进步。学习C++编译环境:Linux第十三课 进阶面向对象(上)你考虑过吗?日常生活中,我们都习惯于对事物进行分类。那么,这种分类的思想是够可以引入程序设计中呢?是的1.面向对象基本概念面向对象的意义在于将日常生活中习惯的思维方式引入程序设计中将需求中的概念直观的映射到解决方案中以模块为中心构建可复用的软件系统提高软...原创 2018-10-26 22:39:46 · 225 阅读 · 0 评论 -
C++笔记 第一课 学习c++的意义---狄泰学院
如果在阅读过程中发现有错误,望评论指正,希望大家一起学习,一起进步。学习C++的意义1.背景知识Unix操作系统诞生之初是直接用汇编语言写成的,随着Unix的发展,汇编语言的开发效率成为一个瓶颈,如何提高Unix的开发效率?1971年,Ken Thompson和Dennis Ritchie对B语言进行了改良,使其能够直接产生机器码,C语言诞生,Unix开始用C语言重写,同时C语言在实践的过程...原创 2018-10-16 20:42:41 · 342 阅读 · 0 评论 -
C++笔记 第二课 C到C++的升级---狄泰学院
如果在阅读过程中发现有错误,望评论指正,希望大家一起学习,一起进步。学习C++编译环境:Linux第二课 C到C++的升级1.C与C++的关系C++继承了所以的C特性C++在C的基础上提供了更多的语法和特性C++的设计目标是运行效率和开发效率的统一2.C到C++的升级C++更强调语言的实用性,所有的变量都可以在需要使用时定义int c = 0; for(int i=1; i&amp;amp;l...原创 2018-10-17 11:40:56 · 283 阅读 · 0 评论 -
C++笔记 第七课 函数参数的扩展---狄泰学院
如果在阅读过程中发现有错误,望评论指正,希望大家一起学习,一起进步。学习C++编译环境:Linux第七课 函数参数的扩展1.函数参数的默认值C++中可以在函数声明时为参数提供一个默认值当函数调用时没有提供参数的值,则使用默认值参数的默认值必须在函数声明中指定问题:函数定义中是否可以出现参数的默认值?当函数声明和定义中的参数默认值不同时会发生什么?7-1 默认参数值初探#incl...原创 2018-10-22 18:46:50 · 216 阅读 · 0 评论 -
C++笔记 第八课 函数重载分析(上)---狄泰学院
如果在阅读过程中发现有错误,望评论指正,希望大家一起学习,一起进步。学习C++编译环境:Linux第八课 函数重载分析(上)1.自然语言中的上下文你知道下面词汇中“洗”字的含义吗?结论:能和“洗”字搭配的词汇有很多“洗”字和不同的词汇搭配有不同的含义2.重载的概念(Overload)同一个 标识符在不同的上下文有不同的意义如:“洗”和不同的词汇搭配后有不同的含义洗衣服,洗脸,...原创 2018-10-22 18:57:13 · 228 阅读 · 0 评论 -
C++笔记 第三课 进化后的const分析---狄泰学院
如果在阅读过程中发现有错误,望评论指正,希望大家一起学习,一起进步。学习C++编译环境:Linux第三课 进化后的const分析1.C语言中的constconst修饰的变量是只读的,本质还是变量const修饰的局部变量在栈上分配空间const修饰的全局变量在只读存储区分配空间const只在编译期有用,在运行期无用const修饰的变量不是真的常量,它只是告诉编译期该变量不能出现在赋值...原创 2018-10-17 19:54:51 · 252 阅读 · 0 评论 -
C++笔记 第五课 引用的本质分析---狄泰学院
如果在阅读过程中发现有错误,望评论指正,希望大家一起学习,一起进步。学习C++编译环境:Linux第五课 引用的本质分析1.引用的意义引用作为变量别名而存在,因此在一些场合可以代替指针引用相对于指针来说具有更好的可读性和实用性swap函数的实现对比:void swap (int&amp;amp; a, int&amp;amp; b){int t = a;a = b;b = t;}v...原创 2018-10-20 11:32:42 · 207 阅读 · 0 评论 -
C++笔记 第六课 内联函数分析---狄泰学院
如果在阅读过程中发现有错误,望评论指正,希望大家一起学习,一起进步。学习C++编译环境:Linux第六课 内联函数分析1.C++中的const常量可以替代宏常数定义如:const int A = 3; <–> #define A 3C++中是否有解决方案替代宏代码片段呢?有,内联函数2.内联函数C++中推荐使用内联函数替代宏代码片段C++中使用inline关键字声明内...原创 2018-10-20 11:49:40 · 223 阅读 · 0 评论 -
C++笔记 第九课 函数重载分析(下)---狄泰学院
如果在阅读过程中发现有错误,望评论指正,希望大家一起学习,一起进步。学习C++编译环境:Linux第九课 函数重载分析(下)1.重载与指针下面的函数指针将保存哪个函数的地址?第一个函数重载遇上函数指针将重载函数名赋值给函数指针时1.根据重载规则挑选与函数指针参数列表一致的候选者2.严格匹配候选者的函数类型与函数指针的函数类型9-1 函数重载VS函数指针#include <...原创 2018-10-23 09:40:18 · 196 阅读 · 0 评论 -
C++笔记 第十课 C++中新成员---狄泰学院
如果在阅读过程中发现有错误,望评论指正,希望大家一起学习,一起进步。学习C++编译环境:Linux第十课 C++中的新成员1.动态内存分配C++中的动态内存分配C++中通过new关键字进行动态内存申请C++中的动态内存申请是基于类型进行的delete关键字用于内存释放10-1 C++中的动态内存分配#include <stdio.h>int main(){ ...原创 2018-10-23 09:52:33 · 255 阅读 · 0 评论 -
C++笔记 第十八课 对象的构造(中)---狄泰学院
如果在阅读过程中发现有错误,望评论指正,希望大家一起学习,一起进步。学习C++编译环境:Linux第十八课 对象的构造(中)1.构造函数带有参数的构造函数构造函数可以根据需要定义参数一个类中可以存在多个重载的构造函数构造函数的重载遵循C++重载的规则友情提示对象定义和对象声明不同对象定义-申请对象的空间并调用构造函数对象声明-告诉编译器存在这样一个对象构造函数的自动调用...原创 2018-11-01 22:04:29 · 148 阅读 · 0 评论 -
C++笔记 第三十一课 完善的复数类---狄泰学院
如果在阅读过程中发现有错误,望评论指正,希望大家一起学习,一起进步。学习C++编译环境:Linux第三十一课 完善的复数类1.完善的复数类复数类应该具有的操作运算:+,-,*,/比较:==,!=赋值:=求模:modulus利用操作符重载统一复数与实数的运算方式统一复数与实数的比较方式Complex 复数类的实现Complex.h#ifndef _COMPLEX_H_...原创 2018-11-09 19:35:03 · 268 阅读 · 0 评论 -
C++笔记 第三十七课 智能指针分析---狄泰学院
如果在阅读过程中发现有错误,望评论指正,希望大家一起学习,一起进步。学习C++编译环境:Linux第三十七课 智能指针分析1.永恒的话题内存泄漏(臭名昭著的Bug)动态申请堆空间,用完后不归还C++语言中没有垃圾回收的机制指针无法控制所指堆空间的生命周期37-1 内存泄漏#include <iostream>#include <string>using...原创 2018-11-16 09:44:51 · 182 阅读 · 0 评论 -
C++笔记 第三十八课 逻辑操作符的陷阱---狄泰学院
如果在阅读过程中发现有错误,望评论指正,希望大家一起学习,一起进步。学习C++编译环境:Linux第三十八课 逻辑操作符的陷阱1.潜规则逻辑运算符的原生语义操作数只有两种值(true和false)逻辑表达式不用完全计算就能确定最终值—短路规则最终结果只能是true或者false38-1 逻辑表达式#include <iostream>#include <str...原创 2018-11-16 09:46:54 · 120 阅读 · 0 评论 -
C++笔记 第四十一课 类型转换函数(上)普通类型--类类型---狄泰学院
如果在阅读过程中发现有错误,望评论指正,希望大家一起学习,一起进步。学习C++编译环境:Linux第四十一课 类型转换函数(上)普通类型–>类类型1.再论类型转换标准数据类型之间会进行隐式的类型安全转换转换规则如下:41-1 有趣的隐式类型转换#include <iostream>#include <string>using namespace s...原创 2018-11-20 21:22:32 · 180 阅读 · 0 评论 -
C++笔记 第四十二课 类型转换函数(下)类类型---其他类型---狄泰学院
如果在阅读过程中发现有错误,望评论指正,希望大家一起学习,一起进步。学习C++编译环境:Linux第四十二课 类型转换函数(下)类类型—>其他类型1.问题类类型是否能够类型转换到普通类型?用编译器测试—可以,引入新的语法规则2.类型转换函数C++类中可以定义类型转换函数类型转换函数用于将类对象转换为其他类型语法规则:42-1 类型转换函数初探#include <i...原创 2018-11-20 21:26:05 · 154 阅读 · 0 评论 -
C++笔记 第三十九课 逗号操作符的分析---狄泰学院
如果在阅读过程中发现有错误,望评论指正,希望大家一起学习,一起进步。学习C++编译环境:Linux第三十九课 逗号操作符的分析1.逗号操作符逗号操作符(,)可以构成逗号表达式逗号表达式用于将多个子表达式连接为一个表达式逗号表达式的值为最后一个子表达式的值逗号表达式中的前N-1个子表达式可以没有返回值逗号表达式按照从左向右的顺序计算每个子表达式的值exp1,exp2,exp3,。。...原创 2018-11-19 10:26:58 · 114 阅读 · 0 评论 -
C++笔记 第四十课 前置操作符和后置操作符---狄泰学院
如果在阅读过程中发现有错误,望评论指正,希望大家一起学习,一起进步。学习C++编译环境:Linux第四十课 前置操作符和后置操作符1.值得思考的问题下面的代码有没有区别?为什么?答案是5.真正的区别i++; //i的值作为返回值,i自增1++i; // i自增1,i的值作为返回值40-1 真的有区别吗?#include <iostream>#include <...原创 2018-11-19 10:31:57 · 133 阅读 · 0 评论 -
C++笔记 第三十五课 函数对象分析---狄泰学院
如果在阅读过程中发现有错误,望评论指正,希望大家一起学习,一起进步。学习C++编译环境:Linux第三十五课 函数对象分析1.客户需求编写一个函数函数可以获得斐波那契数列每项的值每调用一次返回一个值函数可根据需要重复使用for(int i =0; i&lt;10; i++){cout &lt;&lt; fib() &lt;&lt; endl;}35-1 第一个解决方案#..原创 2018-11-15 11:44:21 · 162 阅读 · 0 评论 -
C++笔记 第三十六课 经典问题解析三---狄泰学院
如果在阅读过程中发现有错误,望评论指正,希望大家一起学习,一起进步。学习C++编译环境:Linux第三十六课 经典问题解析三1.关于赋值的疑问什么时候需要重载赋值操作符?编译器是否提供默认的赋值操作?编译器为每个类默认重载了赋值操作符默认的赋值操作符仅完成浅拷贝当需要进行深拷贝时必须重载赋值操作符赋值操作符与拷贝构造函数有相同的存在意义36-1 默认赋值操作符重载#includ...原创 2018-11-15 11:48:53 · 254 阅读 · 0 评论 -
C++笔记 第四十三课 继承的概念和意义---狄泰学院
如果在阅读过程中发现有错误,望评论指正,希望大家一起学习,一起进步。学习C++编译环境:Linux第四十三课 继承的概念和意义1.思考类之间是够存在直接的关联关系?2.生活中的例子组合关系:整体与部分的关系43-1 组合关系的描述强大之处在于:描述生活中的对象—面向对象#include <iostream>#include <string>using...原创 2018-11-21 19:40:03 · 139 阅读 · 0 评论 -
C++笔记 第三十四课 数组操作符的重载---狄泰学院
如果在阅读过程中发现有错误,望评论指正,希望大家一起学习,一起进步。学习C++编译环境:Linux第三十四课 数组操作符的重载1.问题string类对象还具备C方式字符串的灵活性吗?还能直接访问单个字符吗?绝对支持数组直接访问单个字符,使用操作符重载函数进行就可以2.字符串类的兼容性string类最大限度的考虑了C字符串的兼容性可以按照使用C字符串的方式使用string对象str...原创 2018-11-14 14:47:00 · 194 阅读 · 0 评论 -
C++笔记 第三十三课 C++中的字符串类---狄泰学院
如果在阅读过程中发现有错误,望评论指正,希望大家一起学习,一起进步。学习C++编译环境:Linux第三十三课 C++中的字符串类1.历史遗留问题C语言不支持真正意义上的字符串C语言用字符数组和一组函数实现字符串操作C语言不支持自定义类型,因此无法获得字符串类型2.解决方案从C到C++的进化过程引入了自定义类型在C++中可以通过类完成字符串类型的定义问题:C++中的原生类型系统是...原创 2018-11-14 14:43:33 · 203 阅读 · 0 评论 -
C++笔记 第三十二课 初探C++标准库---狄泰学院
如果在阅读过程中发现有错误,望评论指正,希望大家一起学习,一起进步。学习C++编译环境:Linux第三十二课 初探C++标准库1.有趣的重载操作符<<的原生意义是按位左移,例:1<<2;其意义是将整数1按位左移2位,即:0000 0001 -> 0000 0100重载左移操作符,将变量或常量左移到一个对象中!32-1 重载左移操作符#include&l...原创 2018-11-09 19:40:04 · 160 阅读 · 0 评论