C++
码农小李。x17355150737
我的薇:x17355150737
展开
-
第66课 C++中的类型识别
1、类型识别 1.1、在面向对象中可能出现下面的情况 1.1.2、基类指针指向子类对象 1.1.3、基类引用成为子类对象的别名 ▲静态类型——变量(对象)自身的类型(定义变量类型时类型或参数类型) ▲动态类型——指针(引用)所指向的对象的实际类型 1.2、基类指针转子类指原创 2018-01-30 11:02:57 · 181 阅读 · 0 评论 -
第69 技巧:自定义内存管理
1、遗失的关键字::mutable 1.1、mutable关键字 1.1.1、mutable是为了突破const函数的限制而设计的 1.1.2、mutable成员变量将永远处于可改变的状态 1.1.3、mutable在实际的项目开发中被严禁滥用 1.2、深入分析mutable 1.2.1、mutable原创 2018-02-03 15:50:07 · 296 阅读 · 0 评论 -
第43课 继承的概念及意义
1、类之间的组合关系 1.1、组合关系:整体与部分的关系 补充:1、使用组合(has - a)可以用到另一个类中私有的变量和方法,而继承就不可以用到父类的私有的变量和方法了 。2、特别是需要使用到多个类中的东西的时候可以用组合来代替继承(is -a )。3、继承是说:我父亲在家里给我帮了很大的忙。 而组合是说:我请了个老头在我家原创 2018-01-19 15:16:24 · 220 阅读 · 0 评论 -
第42课 类型转换函数
1、类型转换函数 1.1、C++类中可以定义类型转换函数 1.2、类型转换函数用于将类对象转换为其它类型 1.3、语法规则: operator Type() { Type ret; //.............. return原创 2018-01-19 14:08:56 · 220 阅读 · 0 评论 -
第41课 转换构造函数
1、 再论类型转换 1.1、标准数据类型之间会进行隐式的类型安全转换 1.2、转换规则如下: /*************有趣的隐式类型转换*************/#include using namespace std;//使用这个默认命名空间int main(){ short s = 'a'; //char形式的a隐式类型转换为short。 unsi原创 2018-01-19 11:16:33 · 317 阅读 · 0 评论 -
第40课 前置操作符和后置操作符
1、++i和i++真的有区别吗? 1.1、现代编译器会对代码进行优化。对于基础类型,前置++和后置++的汇编代码几乎是一样的,最终效率完全一样。 1.2、优化使得最终的二进制程序更加高效 1.3、优化后的二进制程序丢失了C/C++的原生语义。 1.4、不可能从编译后的二进制程序还原C/C++程序。(反汇编不能还原!)int i = 0;013612FB mov原创 2018-01-19 08:38:22 · 317 阅读 · 0 评论 -
第39课 逗号操作符的分析
1、逗号操作符 1.1、逗号表达式用于将多个子表达式连接为一个表达式 1.2、逗号表达式的值为最后一个子表达式的值 1.3、逗号表达式的前N-1个子表达式可以没有返回值 1.4、逗号表达式按照从左向右的顺序 ->计算每个子表达式的值exp1,exp2,exp3,…,expN; /******************* 逗号表达式的示例 ****************原创 2018-01-18 19:22:35 · 272 阅读 · 0 评论 -
第59课 类模板的深度剖析
1、多参数的类模板 1.1、类模板可以定义任意多个不同的类型参数 1.2、类模板可以被特化 1.2.1、为指定类模板的特定实现,即特化是一个类模板其参数特殊情况时的分开实现。 1.2.2、部分类型参数必须显式指定。如class 1.2.3、根据类型参数分开实现类模板 1.3、类模板的特化类型 1原创 2018-01-26 08:58:11 · 219 阅读 · 0 评论 -
第58课 类模板的概念和意义
1、类模板 1.1、一些类主要用于存储和组织数据元素 1.2、类中数据组织的方式和数据元素的具体类型无关。如数组类、链表类、Stack类、Queue类等。 1.3、C++中将模板的思想应用于类,使得类的实现不关注数据元素的具体类型,而只关注类所需要实现的功能。2、C++中的类模板 2.1、以相同的方式处理不同的类型 2.2、在类声明原创 2018-01-25 16:20:02 · 197 阅读 · 0 评论 -
第60课 数组类模板
1、预备知识 1.1、模板参数可以是数值型参数(非类型参数) template void func() { T a [N]; //使用模板参数定义局部数组 } // 函数调用时:func(); 1.2、数值型模板参数的限制原创 2018-01-27 18:05:33 · 214 阅读 · 0 评论 -
第61课 智能指针类模板
1、智能指针的意义 1.1、现代C++开发库中最重要的类模板之一 1.2、C++中自动内存管理的主要手段 1.3、能够在很大程度上避开内存相关的问题(如内存泄漏、内存的多次释放等)2、STL中的智能指针 2.1、auto_ptr智能指针 2.1.1、生命周期结束时,销毁指向的内存空间 2.1.2、只能用来管理单原创 2018-01-28 16:12:00 · 237 阅读 · 0 评论 -
第44课 继承中的访问级别
1、值得思考的问题 1.1、根据面向对象的理论:子类拥有父类的一切属性和行为,子类能够直接访问父类的私有成员! 1.2、但C++语法规定,外界不能直接访问类的private成员,所以子类也不能直接访问父类的私有成员!2、继承中的访问级别 2.1、面向对象中的访问级别不只是public和private 2.2、可以定义protected访问级别原创 2018-01-20 09:36:08 · 168 阅读 · 0 评论 -
第65课 C++中的异常处理(下)
1、C++中的异常处理 1.1、catch语句块可以抛出异常 1.1.1、catch中获捕的异常可以被重新抛出 1.1.2、抛出的异常需要外层的try-catch块来捕获 1.1.3、catch(…)块中抛异常的方法是throw;也是将所有异常重新抛出 1.2、catch块中重新抛异常的意原创 2018-01-30 09:31:01 · 338 阅读 · 0 评论 -
第64课 C++中的异常处理(上)
1、C++内置的异常处理:try-catch 1.1、try语句处理正常代码逻辑 1.2、catch语句处理异常情况 1.3、try语句中的异常由对应的catch语句处理,如果对应的catch中没有处理该异常,会自动继续沿函数调用栈向上被抛出。2、C++通过throw语句抛出异常情况double divide(double a, dou原创 2018-01-29 15:18:28 · 189 阅读 · 0 评论 -
第63课 C语言异常处理
1、异常的概念 1.1、程序在运行过程中可能产生异常 1.2、异常(Exception)与Bug的区别 1.2.1、异常是程序运行时可预料的执行分支 1.2.2、Bug是程序是的错误,是不被预期的运行方式2、异常和Bug的对比 2.1、异常:如运行时产生除0的情况、需要打开的外部文件不存在、数组访问时越界 2.原创 2018-01-29 14:35:32 · 297 阅读 · 0 评论 -
第62课 单例类模板
1、单例需求的提出 1.1、在架构设计时,某些类在整个系统生命期中最多只能有一个对象存在(Single Instance) 1.2、问题:如何定义一个类,使得这个类最多只能创建一个对象C++中解决方案:1、将构造函数,拷贝构造函数,赋值操作符设置为private的。2、创建一个private的该类的static指针,并且创建一个获得目标类指针的static方法(原创 2018-01-29 11:10:31 · 293 阅读 · 0 评论 -
第48课 同名覆盖引发的问题
1、父子间的赋值兼容(子类对象可以当作父类对象使用) 1.1、子类对象可以直接赋值给父类对象 1.2、子类对象可以直接初始化父类对象 1.3、父类指针可以直接指向子类对象(应该只能使用里面相同的成员吧?) 1.4、父类引用可以直接引用子类对象/********************* 子类对象的兼容性 ********/原创 2018-01-20 16:09:17 · 177 阅读 · 0 评论 -
第47课 父子间的冲突
1、父子间的冲突 1.1、子类可以定义父类中的同名成员 1.2、子类中的成员将隐藏父类中的同名成员(同名覆盖) 1.3、父类中的同名成员依然存在于子类中 1.4、通过作用域分辨符(::)访问父类中的同名成员/**************** 父子间的函数重载 及同名成员变量 ************/#incl原创 2018-01-20 14:33:21 · 202 阅读 · 0 评论 -
第46课 继承中的构造与析构
1、子类对象的构造 1.1、子类中可以定义构造函数 1.2、子类构造函数,必须对继承而来的成员进行初始化,有两种方式 1.2.1、直接通过初始化列表进行初始化或赋值的方式进行初始化 1.2.2、调用父类构造函数进行初始化 1.3、父类构造函数在子类中调用方式 1.3.1、默认调用:适用于无参构造函数和使用默认原创 2018-01-20 14:01:49 · 194 阅读 · 0 评论 -
第45课 不同的继承方式
1、C++中3种不同的继承方式 1.1、public继承:父类成员在子类中保持原有访问级别 1.2、private继承:父类成员在子类中变为私有成员 1.3、protected继承:父类中的公有成员变为保护成员(只有子类可以访问,父类不能访问),其它成员保持不变。 1.3.1、继承成员的访问属性 =Max{继承方式,原创 2018-01-20 10:28:18 · 192 阅读 · 0 评论 -
第57课 深入理解函数模板
1、函数模板深入理解 1.1、编译器从函数模板通过具体类型产生不同的函数 1.2、编译器会对函数模板进行两次编译 1.2.1、对模板代码本身进行编译 1.2.2、对参数替换后的代码进行编译(编译时机:可能发生在定义对象或函数调用时) 1.3、注意事项 1.3.1、函数模板本身不允许隐式类型转换 1原创 2018-01-25 14:35:42 · 169 阅读 · 0 评论 -
71课 外传篇1、异常处理深度解析
1、mian函数中抛异常/************* 异常的最终处理 **************/#include using namespace std;class Test{public: Test() { cout } ~Test() { cou原创 2018-02-01 14:21:30 · 185 阅读 · 0 评论 -
第33课 C++中的字符串
1、历史遗留问题及解决方案 1.1、历史遗留问题 1.1.1、C语言不支持真正意义上的字符串 1.1.2、C语言用字符数组和一组函数实现字符串操作 1.1.3、C语言不支持自定义类型,因此无法获得字符串类型 1.2、解决方案 1.2.1、从C到C++的进化过程引入了自定义类型 1.2.2、原创 2018-01-14 15:54:22 · 368 阅读 · 0 评论 -
第52课 C++中的抽象类和接口
1、什么是抽象类 1.1、面向对象中的抽象概念 1.2、现实中:需要知道具体的图形类型,才能求面积。 1.3、Shape只是一个概念上的类型,没有具体对象2、面向对象中的抽象类 2.1、可用于表示现实世界中的抽象概念 2.2、是一种只能定义类型,而不能产生对象的类 2.3、只能被继承并重写相原创 2018-01-22 11:01:08 · 196 阅读 · 0 评论 -
第51课 C++对象模型分析(下)
1、单继承对象模型 1.1、单一继承 在C++编译器的内部类可以理解为结构体 子类是由父类成员叠加子类新成员得到的。 class Derived : public Demo { int mk; }; /******************原创 2018-01-22 10:29:12 · 282 阅读 · 0 评论 -
第32课 初探C++标准库
1、有趣的重载 1.1、操作符可将变量或常量左移到对象中! (//返回的是引用。这里返回的引用是什么意思呢?) 答:相当于返回调用这个函数的对象,这个引用相当于一个对象的别名(但不是对象的本身。)/*************** 重载左移操作符(仿cout) ******************/#in原创 2018-01-13 10:34:03 · 222 阅读 · 0 评论 -
第31课 完善的复数类
1、复数类 应具有的操作 1.1、运算:+、-、*、/ 1.2、比较:==、!= 1.3、赋值:= 1.4、求模:modulus2、 利用操作符重载 2.1、统一复数与实数的运算方式Complexoperator + (const Complex& c);//因为对象的this关键字的缘故,省去一个参数原创 2018-01-13 08:48:54 · 300 阅读 · 0 评论 -
第30课 操作符重载的概念
1、操作符重载 1.1、C++中的重载能够扩展操作符的功能 1.2、操作符的重载以函数的方式进行,本质上是用特殊形式的函数扩展操作符的功能 1.3、通过operator关键字可以定义特殊函数,operator的本质是通过函数来重载操作符 1.4、语法:TypeoperatorSign(const Type& p1, const Type& p2);/原创 2018-01-12 21:58:35 · 552 阅读 · 0 评论 -
第50课 C++对象模型分析(上)
1、回归本质 1.1、class是一种特殊的结构体 1.1.1、在内存中class依旧可以看作变量的集合 1.1.2、class与struct遵循相同的内存对齐规则 1.1.3、class中的成员函数与成员变量是分开存放的。即每个对象有独立的成员变量,但所有对象共享类中的成员函数。/**************原创 2018-01-21 14:31:47 · 187 阅读 · 0 评论 -
第49课 多态的概念和意义
1、函数重写回顾 1.1、父类中被重写的函数依然会继承给子类 1.2、子类中重写的函数将覆盖父类中的函数 1.3、通过作用域分辨符(::)可以访问到父类中的函数Child c;Parent* p = &c;c.Parent::print(); //从父类中继承c.print()原创 2018-01-21 08:29:31 · 204 阅读 · 0 评论 -
第34课 数组操作符的重载
1、字符串类的兼容性 1.1、string类最大限度的考虑了C字符串的兼容性 1.2、可以按照使用C字符串的方式使用string对象,如 string s = "abcdefg" ; char c = s[i];/******************** 用C方式使用string类 ************原创 2018-01-15 14:04:03 · 246 阅读 · 0 评论 -
第54课 被遗弃的多重继承(下)
1、C++中的多重继承 1.1、一个子类可以拥有多个父类 1.2、子类拥有所有父类的成员变量 1.3、子类继承所有父类的成员函数 1.4、子类对象可以当作任意父类对象使用(父子类有赋值兼容性原则) 1.5、多重继承的语法规则class Derived: public BaseA, public BaseB, public BaseC{…};原创 2018-01-23 13:59:34 · 270 阅读 · 0 评论 -
第35课 函数对象分析
1、.为什么需要函数对象 1.1、案例 1.1.1、编写一个函数,使函数可以获得斐波那契数列每项的值。 1.1.2、每调用一次返回一个值 1.1.3、函数可根据需要重复使用#include using namespace std; //头文件在这个命名空间里int fib(){ stat原创 2018-01-15 15:39:06 · 172 阅读 · 0 评论 -
第70课 展望:未来的学习之路(完结)
1、“经典”C++语言 1.1、C++98/03标准在实际工程中的常用特性 1.2、大多数企业的产品开发中需要使用的C++技能2、未来学习之路 2.1、横向学习 2.2、纵向学习 c++11 2.3、开发平台学习 QT3、课程总结 3.1、原创 2018-02-01 14:19:48 · 479 阅读 · 0 评论 -
第38课 逻辑操作符的陷阱
1、逻辑运算符的原生语义(又叫短路运算符) 1.1、操作数只有两种值(true和false) 1.2、逻辑表达式不用完全计算就能确定最终值 1.3、最终结果只能是true或false /*************** 逻辑表达式(又叫短路表达式) *************/#include using namespac原创 2018-01-17 15:39:29 · 172 阅读 · 0 评论 -
第37课 智能指针分析
1、永恒的话题:内存泄漏 1.1、动态申请堆空间,用完后不归还 1.2、C++语言中没有垃圾回收的机制 1.3、指针无法控制所指堆空间的生命周期/****************** 内存泄露示例 **************/#include using namespace std;class Test{原创 2018-01-17 14:15:38 · 242 阅读 · 0 评论 -
第56课 函数模板的概念和意义
1、发散性问题:C++中的几种交换变量的方法。 1.1、宏代码块 VS 函数/************** 变量的交换 *************/#include #include using namespace std;//宏定义代码块#define SWAP(t, a, b)\do原创 2018-01-25 10:32:20 · 192 阅读 · 0 评论 -
第36课 经典问题解析三
1、关于赋值的疑问 1.1、疑问 1.1.1、编译器为每个类默认重载了赋值操作符 1.1.2、默认的赋值操作符仅完成浅拷贝 1.1.3、当需要进行深拷贝时必须重载赋值操作符 1.1.4、赋值操作符与拷贝构造函数有相同的存在意义/**************** 默认赋值操作符重载 ********原创 2018-01-17 08:59:41 · 229 阅读 · 0 评论 -
第55课 经典问题解析四
1、关于动态内存分配 1.1、new和malloc的区别 1.2、delete/free的区别 /******************** new和malloc的区别 ****************/#include #include #include //fo原创 2018-01-24 09:29:59 · 372 阅读 · 0 评论 -
第67课 经典问题解析五
1、指针的判别 1.1、拾遗 1.1.1、C++中仍然支持C语言中的可变参数函数 1.1.2、C++编译器的匹配调用优先级:重载函数>函数模板>变参函数 1.2、思路 1.2.1、将变量分为两类:指针 VS 非指针 1.2.2、编写函数: 指针变量调用时回true原创 2018-01-30 19:33:53 · 163 阅读 · 0 评论