
C++深度解析
文章平均质量分 69
C++深度解析
mainn
本人是移动互联应用技术专业,选择嵌入式开发方向。声明:博文的编写,主要参考网上资料,并结合个人见解,仅供学习、交流使用,如有侵权,请联系博主删除。...
展开
-
C++深度解析 C++中的抽象类和接口 --- 纯虚函数,虚函数(51)
C++深度解析 C++中的抽象类和接口 --- 纯虚函数,虚函数(51) 抽象类(相当于图形、动物、鸟类(抽象概念),没有意义的。)在现实中需要知道具体的图形类型才能求面积,所以对概念上的“ 图形 ”求面积是没有意义的。 面向对象中的抽象类可用于表示现实世界中的抽象概念是一种只能定义类型,而不能产生对象的类只能被继承并重写相关函数直接特征...原创 2019-01-18 21:14:23 · 417 阅读 · 0 评论 -
C++深度解析 C++对象模型分析(下) --- 继承对象模型,多态对象模型,虚函数表,用C语言实现多态(50)
C++深度解析 C++对象模型分析(下) --- 继承对象模型,多态对象模型,虚函数表,用C语言实现多态(50) 继承对象模型在C++编译器的内部类可以理解为结构体。子类是由 父类成员 叠加 子类新成员 得到的。代码如下:继承对象模型初探#include <iostream>#include <string>using names...原创 2019-01-10 21:33:25 · 354 阅读 · 0 评论 -
C++深度解析 C++对象模型分析(上) --- 成员变量和成员函数在内存中分开存放(49)
C++深度解析 C++对象模型分析(上) --- 成员变量和成员函数在内存中分开存放(49) 对象模型问题:类对象的成员变量和成员函数,在内存是如何分布的?? class和struct区别class是一种特殊的struct。 在内存中class依旧可以看作变量的集合。 class与struct遵循相同的内存对齐规则。 class中的成员函数与成...原创 2019-01-08 15:54:19 · 449 阅读 · 0 评论 -
C++深度解析 多态的概念和意义 --- virtual,虚函数,静态联编,动态联编(48)
C++深度解析 多态的概念和意义 --- virtual,虚函数,静态联编,动态联编(48) 父类指针(引用)指向父类对象则调用父类中定义的函数子类对象则调用子类中定义的重写函数p->print();//p指向父类对象void print(){ cout << "I'm Parent." << endl;}//p...原创 2019-01-07 10:40:13 · 441 阅读 · 0 评论 -
C++深度解析 同名覆盖引发的问题 --- 父子间的赋值兼容,函数重写(47)
C++深度解析 同名覆盖引发的问题 --- 父子间的赋值兼容,函数重写(47) 父子间的赋值兼容(子类对象可以当成父类对象来使用)子类对象可以当作父类对象使用(兼容性)子类对象可以直接赋值给父类对象子类对象可以直接初始化父类对象父类指针可以直接指向子类对象父类引用可以直接引用子类对象示例程序:(子类对象的兼容性)#include <iostr...原创 2019-01-06 13:31:27 · 542 阅读 · 0 评论 -
C++深度解析 父子间的冲突 -- 同名覆盖,同名成员变量,同名函数(46)
C++深度解析 父子间的冲突 -- 同名覆盖,同名成员变量,同名函数(46) 子类定义父类的的同名成员变量示例程序:(同名成员变量)#include <iostream>#include <string>using namespace std;class Parent{public: int mi;};class C...原创 2019-01-05 11:25:06 · 548 阅读 · 0 评论 -
C++深度解析 继承中的构造和析构 -- 隐式调用,显示调用(45)
C++深度解析 继承中的构造和析构 -- 隐式调用,显示调用(45) 思考子类如何初始化父类成员?父类构造函数和子类构造函数有什么关系? 父类构造函数在子类中的调用方式默认调用子类对象创建时,会自动调用父类的构造函数显示调用通过初始化列表进行调用 适用于所有父类构造函数class Child : public Parent{p...原创 2019-01-04 10:52:09 · 528 阅读 · 0 评论 -
C++深度解析 不同的继承方式 --- public继承(44)
C++深度解析 不同的继承方式 --- public继承(44) 继承冒号(:)表示继承关系关系class Parent{};class Child : public Parent{};Parent表示被继承的类,public的意义是什么?示例程序:#include <iostream>#include <string...原创 2019-01-04 09:03:18 · 261 阅读 · 0 评论 -
C++深度解析 继承中的访问级别 --- protected(43)
C++深度解析 继承中的访问级别(43) 子类访问父类的私有成员示例代码:(继承中的访问级别)#include <iostream>#include <string>using namespace std;class Parent{private: int mv;public: Parent() { ...原创 2019-01-03 15:58:06 · 570 阅读 · 0 评论 -
C++深度解析 继承的概念和意义 --- 组合,继承(42)
C++深度解析 继承的概念和意义(42) 类之间的关系:组合、继承。 组合关系:整体与部分的关系示例程序:(组合关系的描述)#include <iostream>#include <string>using namespace std;class Memory{public: Memory() ...原创 2019-01-03 11:03:00 · 399 阅读 · 0 评论 -
C++深度解析 类型转换函数(下) --- 类类型 转换到 普通类型,类类型之间的转换(41)
C++深度解析 类型转换函数(下) --- 类类型 转换到 普通类型,类类型之间的转换(41) 类类型转换到普通类型类型转换函数:operator Type(){ Type ret; // ...... return ret;}类型转换函数:与转换构造函数具有同等的地位使得编译器有能力将对象转化为其他类型编译器能够隐式的使用类型转换函数示...原创 2019-01-02 20:34:47 · 732 阅读 · 0 评论 -
C++深度解析 类型转换函数(上)--- 转换构造函数(40)
C++深度解析 类型转换函数(上)--- 转换构造函数(40) 类型转换标准数据类型之间会进行隐式的类型安全转换示例分析:(隐式转换)#include <iostream>#include <string>using namespace std;int main(){ //小类型初始化大类型 //char -...原创 2019-01-02 18:36:37 · 301 阅读 · 0 评论 -
C++深度解析 前置操作符++i和后置操作符i++ --- ++操作符重载(39)
C++深度解析 前置操作符++i和后置操作符i++ --- ++操作符重载(39) 下面的代码有没有区别?i++; // i的值作为返回值,i自增1++i; // i自增1,i的值作为返回值答:对于基础类型的变量前置++的效率与后置++的效率基本相同 根据项目组编码规范进行选择对于类类型的对象前置++的效率高于后置++ 尽量使用前置++...原创 2019-01-02 15:05:57 · 612 阅读 · 0 评论 -
C++深度解析 逗号操作符 --- 逗号表达式,重载逗号操作符(38)
C++深度解析 逗号操作符 --- 逗号表达式,重载逗号操作符(38) 逗号操作符( , )可以构成逗号表达式逗号表达式用于将多个子表达式连接为一个表达式。 逗号表达式的值为最后一个子表达式的值。 逗号表达式的前N-1个子表达式可以没有返回值。 逗号表达式按照从左向右的顺序计算每个子表达式的值。示例程序:#include <iostream>#...原创 2019-01-02 10:33:53 · 421 阅读 · 0 评论 -
C++深度解析 逻辑操作符的陷阱 --- 重载逻辑操作符,函数参数调用的求值次序(37)
C++深度解析 逻辑操作符的陷阱 --- 重载逻辑操作符,函数参数调用的求值次序(37) 逻辑运算符的原生语义操作数只有两种植(true和false)逻辑表达式不用完全计算就能确定最终值最终结果只能是true或者false示例程序:逻辑表达式#include <iostream>#include <string>using n...原创 2019-01-01 19:29:44 · 247 阅读 · 0 评论 -
C++深度解析 智能指针分析 --- 重载指针特征操作符->和*(36)
C++深度解析 智能指针分析 --- 重载指针特征操作符->和*(36) 智能指针解决内存泄漏的问题。内存泄漏(臭名昭著的Bug)动态申请堆空间,用完后不归还 C++语言中没有垃圾回收的机制 指针无法控制所指堆空间的生命周期示例程序:#include <iostream>#include <string>using nam...原创 2019-01-01 17:36:42 · 518 阅读 · 0 评论 -
C++深度解析 经典问题解析三 --- 赋值操作符重载 和 拷贝构造函数,string类的疑问(35)
C++深度解析 经典问题解析三 --- 赋值操作符重载 和 拷贝构造函数,string类的疑问(35) 赋值操作符什么时候需要重载赋值操作符?编译器是否提供默认的赋值操作?关于赋值的疑问:编译器为每个类默认重载了赋值操作符。默认的赋值操作符仅完成浅拷贝。当需要进行深拷贝时必须重载赋值操作符。赋值操作符与拷贝构造函数有相同的存在意义。示例程序:(默...原创 2018-12-31 13:44:18 · 296 阅读 · 0 评论 -
C++深度解析 函数对象分析 --- 重载函数调用操作符()(34)
C++深度解析 函数对象分析 --- 重载函数调用操作符()(34) 客户需求:编写一个函数函数可以获得斐波那契数列每项的值 每调用一次返回一个值(1 1 2 3 5 8 13) 函数可根据需要重复使用第一次调用返回1,第二次调用返回1,第三次调用返回2,第四次调用返回3,第五次调用返回5,第六次调用返回8,第七次调用返回13。示例程序:#include...原创 2018-12-30 21:16:07 · 386 阅读 · 0 评论 -
C++深度解析 数组操作符的重载 --- 数组访问操作符[ ](33)
C++深度解析 数组操作符的重载 --- 数组访问操作符[ ](33) 通过数组访问操作符[ ],访问字符串里面的单个字符。示例程序:#include <iostream>#include <string>using namespace std;int main(){ string s = "a1b2c3d4e"; ...原创 2018-12-30 19:18:33 · 531 阅读 · 0 评论 -
C++深度解析 C++中的字符串类 --- string类,字符串与数字之间的转换,istringstream,ostringstream,字符串循环右移(32)
C++深度解析 C++中的字符串类 --- string类,字符串与数字之间的转换,istringstream,ostringstream,字符串循环右移(32) C++标准库提供了string类型string 直接支持字符串连接 string 直接支持字符串的大小比较 string 直接支持子串查找和提取 string 直接支持字符串的插入和替换示例程序:(字符串...原创 2018-12-30 16:22:28 · 802 阅读 · 0 评论 -
C++深度解析 初探C++标准库 --- cin,cout,std(31)
C++深度解析 初探C++标准库 --- cin,cout,std(31) 重载左移操作符示例程序:#include <stdio.h>const char endl = '\n';class Console{public: Console& operator << (int i) { pri...原创 2018-12-30 14:06:53 · 572 阅读 · 0 评论 -
C++深度解析 完整的复数类 --- 操作符重载(30)
C++深度解析 完整的复数类 --- 操作符重载(30) 利用操作符重载统一复数与实数的运算方式 统一复数与实数的比较方式 Complex operator + (const Complex& c); Complex operator - (const Complex& c); Complex operator * (const ...原创 2018-12-30 12:15:31 · 545 阅读 · 0 评论 -
C++深度解析 操作符重载的概念 --- operator,成员函数的版本实现操作符重载,全局函数的版本实现操作符重载(29)
C++深度解析 操作符重载的概念 --- operator,成员函数的版本实现重载,全局函数的版本实现重载(29) 复数解决方案//复数类class Complex{public: int a; //实部 int b; //虚部};int main(){ //复数c1, c2, c3 Complex c1 = {1, 2}; Complex c2 ...原创 2018-12-29 17:19:44 · 333 阅读 · 0 评论 -
C++深度解析 类中的函数重载 -- 全局函数,普通成员函数,静态成员函数(28)
C++深度解析 类中的函数重载 -- 全局函数,普通成员函数,静态成员函数(28) 函数重载的回顾函数重载的本质为相互独立的不同函数C++中通过函数名和函数参数确定函数调用无法直接通过函数名得到重载函数的入口地址函数重载必然发生在同一个作用域中 类中的成员函数可以进行重载构造函数的重载 普通成员函数的重载 静态成员函数的重载 ...原创 2018-12-29 10:03:58 · 2001 阅读 · 0 评论 -
C++深度解析 友元的尴尬能力 --- friend(27)
C++深度解析 友元的尴尬能力 --- friend(27) 友元 friend友元关系是单项的,不能传递。类的友元可以是其他类或者具体函数。友元可以直接访问具体类的所有成员。(不管是public还是private)class Point{ //私有的 double x; double y; //声明了友元关系,func...原创 2018-12-28 20:29:51 · 339 阅读 · 0 评论 -
C++深度解析 二阶构造模式 --- 半成品对象(26)
C++深度解析 二阶构造模式(26) 二阶构造模式《===等价于===》二阶构造方法关于构造函数类的构造函数用于对象的初始化 构造函数与类同名并且没有返回值 构造函数在对象定义时自动被调用 面试问题,并且引入课题:1、如何判断构造函数的执行结果?答:没有办法判断。2、在构造函数中执行return语句会发生什么?答:可以存在return语句,...原创 2018-12-28 10:53:11 · 506 阅读 · 0 评论 -
C++深度解析 类的静态成员函数 --- static(25)
C++深度解析 类的静态成员函数 --- static(25) 续上一个的内容:未完成需求统计在程序运行期间某个类的对象数目(使用静态成员变量)保证程序的安全性(不能使用全局变量)随时可以获取当前对象的数目(Failure)示例程序:#include <stdio.h> class Test{public: static int cC...原创 2018-12-27 20:48:17 · 709 阅读 · 0 评论 -
C++深度解析 类的静态成员变量 --- static(24)
C++深度解析 类的静态成员变量 --- static(24) 成员变量的回顾通过对象名能够访问public成员变量。每个对象的成员变量都是专属的。成员变量不能在对象之间共享。PS:成员变量是对象自己的,所以成员变量一般都设置为私有的。新的需求:统计在程序运行期间某个类的对象数目。 保证程序的安全性(不能使用全局变量)。 随时可以获取当前对象的数目。...原创 2018-12-27 16:50:31 · 584 阅读 · 0 评论 -
C++深度解析 经典问题解析二 -- 析构顺序,const修饰类的对象,方法能够直接访问对象的属性,指针this(23)
C++深度解析 经典问题解析二 -- 析构顺序,const修饰类的对象,所有的对象共享成员函数,this(23) 当程序中存在多个对象的时候,如何确定这些对象的析构顺序?单个对象创建时构造函数的调用顺序1、调用父类的构造过程2、调用成员变量的构造函数(调用顺序与声明顺序相同)3、调用类自身的构造函数析构函数与对应构造函数的调用顺序相反。多个对象析构时...原创 2018-12-27 10:49:17 · 279 阅读 · 0 评论 -
C++深度解析 临时对象 --- 直接调用构造函数,手动去调用构造函数(22)
C++深度解析 临时对象 --- 直接调用构造函数,手动去调用构造函数(22) 临时对象(直接调用构造函数。代码上手动去调用而非编译器自己调用构造函数)直接调用构造函数将产生一个临时对象。临时对象的生命周期只有一条语句的时间。临时对象的作用域只在一条语句中。临时对象是C++中值得警惕的灰色地带。示例程序:(临时对象的引入,在构造函数中调用构造函数)#incl...原创 2018-12-26 19:55:57 · 2828 阅读 · 1 评论 -
C++深度解析 对象的销毁 --- 析构函数,~ClassName()(21)
C++深度解析 对象的销毁 --- 析构函数,~ClassName()(21) 析构函数C++的类中可以定义一个特殊的清理函数这个特殊的清理函数叫做析构函数 析构函数的功能与构造函数相反定义:~ClassName()~ : 取反符号析构函数没有参数也没有返回值类型声明 析构函数在对象销毁时自动被调用示例程序:#include <stdio...原创 2018-12-26 16:48:33 · 1119 阅读 · 0 评论 -
C++深度解析 对象的构造顺序 --- 局部对象的构造顺序,goto语句,堆对象的构造顺序,全局对象的构造顺序(20)
C++深度解析 对象的构造顺序 --- 局部对象的构造顺序,goto语句,堆对象的构造顺序,全局对象的构造顺序(20) C++中的类可以定义多个对象,那么对象构造的顺序是怎样的? 局部对象的构造顺序当程序执行流 到达 对象的定义语句时 进行构造。示例程序一:#include <stdio.h>class Test{private: ...原创 2018-12-26 10:15:26 · 251 阅读 · 0 评论 -
C++深度解析 初始化列表的使用 --- 初始化列表,类中的const成员(19)
C++深度解析 初始化列表的使用 --- 初始化列表,类中的const成员(19) 类中是否可以定义const成员1、定义一个真正意义上的常量2、定义只读变量示例程序:(类中的const成员)#include <stdio.h>class Test{private: const int ci;public: Test...原创 2018-12-25 20:12:31 · 441 阅读 · 0 评论 -
C++深度解析 对象的构造(下)---无参构造函数,拷贝构造函数,深拷贝,浅拷贝(18)
C++深度解析 对象的构造(下)---无参构造函数,拷贝构造函数,深拷贝,浅拷贝(18) 特殊的构造函数无参构造函数当类中没有定义构造函数时,编译器默认提供一个无参构造函数,并且其函数体为空。//经典的面试题,这个类里面有什么东西//空类,里面至少有一个无参构造函数,编译器提供class T{ /* T() { } *...原创 2018-12-24 17:09:20 · 593 阅读 · 0 评论 -
C++深度解析 对象的构造(中)---对象定义和声明,构造函数的重载,手工和自动调用构造函数,数组类(17)
C++深度解析 对象的构造(中)---对象定义和声明,构造函数的重载,手工和自动调用构造函数,数组类(17) 对象的构造由构造函数完成函数名与类名相同,并且不能有任何返回值。 带有参数的构造函数意义:可以使得每个对象有不同的初始化状态。一个类中可以存在多个重载的构造函数。构造函数的重载遵循C++重载的规则。 对象定义和对象...原创 2018-12-23 14:28:13 · 664 阅读 · 0 评论 -
C++深度解析 对象的构造(上)---初始化 initialize,构造函数(16)
C++深度解析 对象的构造(上)(16) 对象中成员变量的初始值示例程序:#include <stdio.h>//Test是一个自定义数据类型class Test{private: int i; int j;public: int getI() {return i;} int getJ() {return j;}...原创 2018-12-20 16:52:59 · 3418 阅读 · 0 评论 -
C++深度解析 类的真正形态---struct,class(15)
C++深度解析 类的真正形态---struct,class(15) 类的关键字class在C++中提供了新的关键字class用于类定义class和struct的用法是完全相同的。 class和struct区别在用struct定义类时,所有成员的默认访问级别为public。在用class定义类时,所有成员的默认访问级别为private。s...原创 2018-12-20 14:51:17 · 249 阅读 · 0 评论 -
C++深度解析 类与封装的概念---public private(14)
C++深度解析 类与封装的概念---public private(14) 类通常分为以下两个部分类的实现细节类的使用方式 类的封装当使用类,不需要关心其实现细节当创建了类,才需要考虑其内部实现细节例如:普通用户使用手机:只需要学习如何发短信,打电话,拍照,等等。手机开发工程师:需要考虑手机内部的实现细节。 ...原创 2018-12-20 10:26:29 · 177 阅读 · 0 评论 -
C++深度解析 进阶面向对象(下)(13)
C++深度解析 进阶面向对象(下)(13) 类之间的基本关系继承从已存在类细分出来的类和原类之间具有继承关系(is-a:就是)。(东北虎 is a 老虎)继承的类(子类)拥有原类(父类)的所有属性和行为。组合一些类的存在必须依赖于其他的类,这种关系叫组合。(电脑类包含内存类,主板类,硬盘类,CPU类)组合的类在某一个局部上由其他的类组成。 ...原创 2018-12-19 20:29:53 · 251 阅读 · 2 评论 -
C++深度解析 经典问题解析---const和引用,只读变量和常量,引用和指针(11)【详细】
C++深度解析 经典问题解析 const和引用,只读变量和常量(11)【详细】 对于const的疑问const常量的判别准则:只有用字面量初始化的const常量才会进入符号表,是真正意义上的常量 使用其他变量初始化的const常量仍然是只读变量 被volatile修饰(易变的,可能发生变化的)的const常量不会进入符号表,volatile const同时修饰的标识...原创 2018-12-17 16:50:31 · 1612 阅读 · 0 评论