- 博客(39)
- 资源 (1)
- 收藏
- 关注
原创 第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 140
原创 第68课 拾遗:让人迷惑的写法
1、typename的前世今生 1.1、定义模板时使用class的历史原因 1.1.1、早期的C++直接复用class关键字来定义模板 1.1.2、但是泛型编程针对的不只是类类型 1.1.3、class关键字的复用使得代码出现二义性 1.2、typename诞生的直接诱因 1.2.1、自定义类类型内部的嵌套
2018-01-30 19:30:49 194
原创 第66课 C++中的类型识别
1、类型识别 1.1、在面向对象中可能出现下面的情况 1.1.2、基类指针指向子类对象 1.1.3、基类引用成为子类对象的别名 ▲静态类型——变量(对象)自身的类型(定义变量类型时类型或参数类型) ▲动态类型——指针(引用)所指向的对象的实际类型 1.2、基类指针转子类指
2018-01-30 11:02:57 141
原创 第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 271
原创 第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 146
原创 第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 269
原创 第62课 单例类模板
1、单例需求的提出 1.1、在架构设计时,某些类在整个系统生命期中最多只能有一个对象存在(Single Instance) 1.2、问题:如何定义一个类,使得这个类最多只能创建一个对象C++中解决方案:1、将构造函数,拷贝构造函数,赋值操作符设置为private的。2、创建一个private的该类的static指针,并且创建一个获得目标类指针的static方法(
2018-01-29 11:10:31 266
原创 第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 197
原创 第60课 数组类模板
1、预备知识 1.1、模板参数可以是数值型参数(非类型参数) template void func() { T a [N]; //使用模板参数定义局部数组 } // 函数调用时:func(); 1.2、数值型模板参数的限制
2018-01-27 18:05:33 174
原创 第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 175
原创 第58课 类模板的概念和意义
1、类模板 1.1、一些类主要用于存储和组织数据元素 1.2、类中数据组织的方式和数据元素的具体类型无关。如数组类、链表类、Stack类、Queue类等。 1.3、C++中将模板的思想应用于类,使得类的实现不关注数据元素的具体类型,而只关注类所需要实现的功能。2、C++中的类模板 2.1、以相同的方式处理不同的类型 2.2、在类声明
2018-01-25 16:20:02 159
原创 第57课 深入理解函数模板
1、函数模板深入理解 1.1、编译器从函数模板通过具体类型产生不同的函数 1.2、编译器会对函数模板进行两次编译 1.2.1、对模板代码本身进行编译 1.2.2、对参数替换后的代码进行编译(编译时机:可能发生在定义对象或函数调用时) 1.3、注意事项 1.3.1、函数模板本身不允许隐式类型转换 1
2018-01-25 14:35:42 142
原创 第56课 函数模板的概念和意义
1、发散性问题:C++中的几种交换变量的方法。 1.1、宏代码块 VS 函数/************** 变量的交换 *************/#include #include using namespace std;//宏定义代码块#define SWAP(t, a, b)\do
2018-01-25 10:32:20 169
原创 第55课 经典问题解析四
1、关于动态内存分配 1.1、new和malloc的区别 1.2、delete/free的区别 /******************** new和malloc的区别 ****************/#include #include #include //fo
2018-01-24 09:29:59 321
原创 第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 250
原创 第52课 C++中的抽象类和接口
1、什么是抽象类 1.1、面向对象中的抽象概念 1.2、现实中:需要知道具体的图形类型,才能求面积。 1.3、Shape只是一个概念上的类型,没有具体对象2、面向对象中的抽象类 2.1、可用于表示现实世界中的抽象概念 2.2、是一种只能定义类型,而不能产生对象的类 2.3、只能被继承并重写相
2018-01-22 11:01:08 152
原创 第51课 C++对象模型分析(下)
1、单继承对象模型 1.1、单一继承 在C++编译器的内部类可以理解为结构体 子类是由父类成员叠加子类新成员得到的。 class Derived : public Demo { int mk; }; /******************
2018-01-22 10:29:12 237
原创 第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 145
原创 第49课 多态的概念和意义
1、函数重写回顾 1.1、父类中被重写的函数依然会继承给子类 1.2、子类中重写的函数将覆盖父类中的函数 1.3、通过作用域分辨符(::)可以访问到父类中的函数Child c;Parent* p = &c;c.Parent::print(); //从父类中继承c.print()
2018-01-21 08:29:31 172
原创 第48课 同名覆盖引发的问题
1、父子间的赋值兼容(子类对象可以当作父类对象使用) 1.1、子类对象可以直接赋值给父类对象 1.2、子类对象可以直接初始化父类对象 1.3、父类指针可以直接指向子类对象(应该只能使用里面相同的成员吧?) 1.4、父类引用可以直接引用子类对象/********************* 子类对象的兼容性 ********/
2018-01-20 16:09:17 141
原创 第47课 父子间的冲突
1、父子间的冲突 1.1、子类可以定义父类中的同名成员 1.2、子类中的成员将隐藏父类中的同名成员(同名覆盖) 1.3、父类中的同名成员依然存在于子类中 1.4、通过作用域分辨符(::)访问父类中的同名成员/**************** 父子间的函数重载 及同名成员变量 ************/#incl
2018-01-20 14:33:21 165
原创 第46课 继承中的构造与析构
1、子类对象的构造 1.1、子类中可以定义构造函数 1.2、子类构造函数,必须对继承而来的成员进行初始化,有两种方式 1.2.1、直接通过初始化列表进行初始化或赋值的方式进行初始化 1.2.2、调用父类构造函数进行初始化 1.3、父类构造函数在子类中调用方式 1.3.1、默认调用:适用于无参构造函数和使用默认
2018-01-20 14:01:49 151
原创 第45课 不同的继承方式
1、C++中3种不同的继承方式 1.1、public继承:父类成员在子类中保持原有访问级别 1.2、private继承:父类成员在子类中变为私有成员 1.3、protected继承:父类中的公有成员变为保护成员(只有子类可以访问,父类不能访问),其它成员保持不变。 1.3.1、继承成员的访问属性 =Max{继承方式,
2018-01-20 10:28:18 167
原创 第44课 继承中的访问级别
1、值得思考的问题 1.1、根据面向对象的理论:子类拥有父类的一切属性和行为,子类能够直接访问父类的私有成员! 1.2、但C++语法规定,外界不能直接访问类的private成员,所以子类也不能直接访问父类的私有成员!2、继承中的访问级别 2.1、面向对象中的访问级别不只是public和private 2.2、可以定义protected访问级别
2018-01-20 09:36:08 144
原创 第43课 继承的概念及意义
1、类之间的组合关系 1.1、组合关系:整体与部分的关系 补充:1、使用组合(has - a)可以用到另一个类中私有的变量和方法,而继承就不可以用到父类的私有的变量和方法了 。2、特别是需要使用到多个类中的东西的时候可以用组合来代替继承(is -a )。3、继承是说:我父亲在家里给我帮了很大的忙。 而组合是说:我请了个老头在我家
2018-01-19 15:16:24 197
原创 第42课 类型转换函数
1、类型转换函数 1.1、C++类中可以定义类型转换函数 1.2、类型转换函数用于将类对象转换为其它类型 1.3、语法规则: operator Type() { Type ret; //.............. return
2018-01-19 14:08:56 180
原创 第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 293
原创 第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 272
原创 第39课 逗号操作符的分析
1、逗号操作符 1.1、逗号表达式用于将多个子表达式连接为一个表达式 1.2、逗号表达式的值为最后一个子表达式的值 1.3、逗号表达式的前N-1个子表达式可以没有返回值 1.4、逗号表达式按照从左向右的顺序 ->计算每个子表达式的值exp1,exp2,exp3,…,expN; /******************* 逗号表达式的示例 ****************
2018-01-18 19:22:35 236
原创 第38课 逻辑操作符的陷阱
1、逻辑运算符的原生语义(又叫短路运算符) 1.1、操作数只有两种值(true和false) 1.2、逻辑表达式不用完全计算就能确定最终值 1.3、最终结果只能是true或false /*************** 逻辑表达式(又叫短路表达式) *************/#include using namespac
2018-01-17 15:39:29 153
原创 第37课 智能指针分析
1、永恒的话题:内存泄漏 1.1、动态申请堆空间,用完后不归还 1.2、C++语言中没有垃圾回收的机制 1.3、指针无法控制所指堆空间的生命周期/****************** 内存泄露示例 **************/#include using namespace std;class Test{
2018-01-17 14:15:38 200
原创 第36课 经典问题解析三
1、关于赋值的疑问 1.1、疑问 1.1.1、编译器为每个类默认重载了赋值操作符 1.1.2、默认的赋值操作符仅完成浅拷贝 1.1.3、当需要进行深拷贝时必须重载赋值操作符 1.1.4、赋值操作符与拷贝构造函数有相同的存在意义/**************** 默认赋值操作符重载 ********
2018-01-17 08:59:41 187
原创 第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 150
原创 第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 202
原创 第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 264
原创 第32课 初探C++标准库
1、有趣的重载 1.1、操作符可将变量或常量左移到对象中! (//返回的是引用。这里返回的引用是什么意思呢?) 答:相当于返回调用这个函数的对象,这个引用相当于一个对象的别名(但不是对象的本身。)/*************** 重载左移操作符(仿cout) ******************/#in
2018-01-13 10:34:03 195
原创 第31课 完善的复数类
1、复数类 应具有的操作 1.1、运算:+、-、*、/ 1.2、比较:==、!= 1.3、赋值:= 1.4、求模:modulus2、 利用操作符重载 2.1、统一复数与实数的运算方式Complexoperator + (const Complex& c);//因为对象的this关键字的缘故,省去一个参数
2018-01-13 08:48:54 272
原创 第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 505
原创 第29课 类中的函数重载
1、函数重载的回顾 1.1、函数重载的本质为互相独立的不同函数。 1.2、C++中通过函数名和函数参数确定函数调用,函数名和参数列表组成唯一的标识。 1.3、无法直接通过函数名得到重载函数的入口地址。 1.4、函数重载必然发生在同一个作用域中。/********* 类成员函数指针(类成员函数的函数指针) *******/#include
2018-01-12 15:32:16 222
JSP+Servlet+MySql+Redis的网上商城项目.rar
2019-10-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人