c++ 深度解析
解析学习中易错,易混淆知识点,分享出来便于自己复习,也便于大家学习。
哇风
欢迎大家一起来学习 c/c++ ,数据结构,嵌入式相关课程
交流qq群:499984459
展开
-
【c++深度解析4】二阶构造模式
1.为什么要使用二阶构造?答:因为构造函数只提供自动初始化成员变量的机会,不能保证初始化逻辑一定成功,执行return语句后构造函数立即结束,构造函数能决定的只是对象的初始状态,而不是对象的诞生!!所以有可能创造一些半成品对象导致BUG的引入。故而要使用二阶构造,来避免半成品对象的产生2.工程开发中的构造过程可分为1.资源无关的初始化操作(不可能出现异常情况的操作)2.需要使用系统资源的操作可能出现异常情况,如:内存申请,访问文件...原创 2020-07-30 07:20:15 · 133 阅读 · 0 评论 -
【c++深度解析三】类的静态成员变量和静态成员函数
问题一:写一个满足如下需求的程序1.统计在程序运行期间某个类的对象数目2、保证程序的安全性(不能使用全局变量)3.随时可以获取当前对象的数目答:使用静态成员变量解决如上问题代码如下:#include <stdio.h>class A{public: A() { m_count ++; } ~A() { m_count --; } static int getCount()原创 2020-07-26 03:01:49 · 147 阅读 · 0 评论 -
c++深度解析毕业照
目录原创 2020-07-18 18:01:12 · 167 阅读 · 0 评论 -
自定义内存管理
1.mutable修饰的 成员变量将永远可以改变,有什么办法不使用mutable 在const 成员函数中修改成员变量值了使用指针修改指针指向的堆空间的值,变向的修改成员变量的值2.new 关键字创建出来的对象位于什么地方?new 关键字创建出来的对象位于堆空间中3.那么有什么办法可以让new关键字创建出来的对象位于其他空间了可以,使用操作符重载,可以自己人为实现。void...原创 2019-10-21 16:31:07 · 88 阅读 · 0 评论 -
C++中单例对象的内存释放问题
C++中单例对象的内存自动释放单例模式是一种在设计中很常用的模式,通过static函数创建一个对象,以后的所有的数据都通过该函数操作,保持数据唯一,用起来也很方便,但是有个小小的问题,就是单例对象的释放问题,一般我们都是程序退出的时候统一释放对象,但是这并不是特别完美,有时候你可能会忘记调用,然后就发生了内存泄露,当然,现代操作系统会对每个程序进行内存管理,程序销毁的时候,这个程序所创建...原创 2020-03-29 22:02:20 · 1239 阅读 · 0 评论 -
c++深度解析17 类模板
c++中的类模板 1.以相同的方式处理不同的类 2.在类声明前使用template进行标识 3。<typename T> 用于说明类中使用的泛指类型T原创 2019-04-27 20:15:37 · 448 阅读 · 0 评论 -
【c++深度问题分析16】函数模板的概念和意义
泛型编程的概念、 不考虑具体数据类型的编程方式,对于Swap数值交换函数可以考虑下面的泛型写法 Void Swap( T & a , T& b){ T t = a; a = b; b = t;}swap 泛型写法中的T 不是一个具体的数据类型,而是泛指任意的数据类型c++ 中泛型编程...原创 2019-02-17 11:21:31 · 157 阅读 · 0 评论 -
【c++深度解析15】 经典问题解析
关于动态内存分配:1.new 和 malloc 的区别是什么? new 关键字是c++的一部分malloc是由c库提供的函数new以具体类型为单位进行内存分配malloc 以字节为单位进行内存分配new 在申请内存空间时可以进行初始化(自动调用构造函数)malloc仅根据需要申请定量的内存空间 关于虚函数:构造函数是否可以成为虚函数?答:构造函数不可能成...原创 2019-02-12 01:03:01 · 151 阅读 · 0 评论 -
【c++深度解析14】c++中的抽象类和接口
面向对象中的抽象类1.可用于表示现实世界中的抽象概念2.是一种只能定义类型,而不能产生对象的类3.只能被继承,并重写相关函数4.直接特性是相关函数没有完整的实现 c++中通过纯虚函数实现抽象类 满足下面条件的c++类则称为接口:1.类中没有定义任何的成员变量2.所有的成员函数都是公有的3.所有的成员函数都是纯虚函数4.接口是一种特殊的抽象类 ...原创 2019-02-11 02:09:58 · 139 阅读 · 0 评论 -
【c++深度解析 13】 多态对象模型
从c++对象模型中知道,一个类的成员变量和成员函数在内存中是分开存放的,成员函数存放于代码段 ,成员变量 类结构体方式顺序存放的,(存在字节对齐问题)那么继承的对象模型又是怎样的了?继承的对象模型子类是父类的成员变量后加入子类新增的成员得到的 多态的对象模型c++多态的实现原理:当类中声明虚函数时,编译器会在类中生成一个虚函数表,虚函数表是一个存储成员函数地址的数据结构...原创 2019-02-11 02:00:22 · 173 阅读 · 0 评论 -
【c++深度解析12】 c++对象模型分析
class 中的成员函数与成员变量是分开存放的每个对象有独立的成员函数所有对象共享类中的成员函数下面看如下一段代码:#include <iostream>#include <string>using namespace std;class A{ int i; int j; char c; double d;pub...原创 2019-02-10 17:16:34 · 155 阅读 · 0 评论 -
【c++深度解析11】多态的概念和意义
在同名覆盖引发的问题中,父类对象指向子类对象直接将其退化为父类对象,导致没有达到函数重写期望的结果,那么程序怎样根据实际的对象类型判断如何调用重写函数了,c++中的多态就可以解决该问题c++语言直接 支持多态:通过virtual关键字来进行支持,被virtual声明的函数叫做虚函数多态的概念:静态联编: 在程序的编译期间就能够确定具体的函数调用,如:函数重载动态联编:在程序的实...原创 2019-02-10 01:19:09 · 230 阅读 · 0 评论 -
【c++深度解析10】同名覆盖引发的问题
父子间的赋值兼容1.子类对象可以当做父类对象使用(兼容性)2.子类对象可以直接初始化父类对象3.父类指针可以直接指向子类对象4.父类引用可以直接引用子类对象 当使用父类指针(引用)指向子类对象时1.子类对象退化为父类对象2.只能访问父类中定义的成员3.可以直接访问被子类覆盖的同名成员特殊的同名函数子类中可以重定义父类中已经存在的成员函数,这种重定义发生在...原创 2019-02-08 18:50:47 · 278 阅读 · 0 评论 -
【c++深度解析9】父子间的冲突
问题一: 子类是否可以定义父类中的同名成员?如果可以,如何区分?如果不可以,为什么?答:1。子类可以定义父类中的同名成员。 2.子类中的成员将隐藏父类中的同名成员。 3. 父类中的同名成员依然存在于子类中 4. 通过作用域分辨符(::) 访问父类中的同名成员 问题二: 子类中定义的函数,是否能重载父类中的同名函数?答:我们首先回忆重载的...原创 2019-02-04 22:57:54 · 181 阅读 · 0 评论 -
【c++深度解析8】类型转换函数
c++类中可以定义类型转换函数,用于将类对象转换为其他类型语法规则如下:operator Type(){ Type ret; // ... return ret;} 但是类型转换函数中1无法抑制隐式的类型转换函数调用,导致代码可读性不强,工程中 大多以 Type toType( )的公有成员函数代...原创 2019-01-20 22:06:19 · 111 阅读 · 0 评论 -
【c++深度解析7】隐式类型转换二
转换构造函数:参数满足如下条件时的构造函数为转换构造函数:1.有且仅有一个参数2.参数是基本类型3.参数是其他类型下面看下如下的代码:#include <iostream>#include <string>using namespace std;class Test{ int mValue;public: Test() ...原创 2019-01-20 21:39:42 · 135 阅读 · 0 评论 -
【c++深度解析6】隐式类型转换
标准数据类型之间会进行隐式类型转换转换规则如下:(小范围转换为大范围) 下面通过一段代码来说明隐式类型转换的危害:#include <iostream>#include <string>using namespace std;int main(){ short s = 'c'; unsigned int ui = 100...原创 2019-01-17 02:59:22 · 184 阅读 · 0 评论 -
【c++深度解析 5】 前置操作符和后置操作符重载
问题 1.下面的代码有区别吗?为什么? i++; // i的值作为返回值,i自增1 ++i; // i 自增1,i的值作为返回值 对于基础类型的变量: 前置++的效率 和后置++的效率基本相同(编译器进行了优化)对于类类型的对象: 前置++的效率高于后置++,尽量使用前置++操作符提高程序效率问题2. c++ 操...原创 2019-01-17 02:13:48 · 200 阅读 · 0 评论 -
【c++深度解析3】逗号操作符
问题1.在c++逗号操作符可以重载吗,重载逗号操作符有意义吗?答: 在c++中可以重载逗号操作符,在工程开发中不要重载逗号操作符,那是无意义的下面我们复习下逗号操作符:1.逗号操作符(,)可以构成逗号表达式2.逗号表达式用于将多个子表达式连接为一个表达式3.逗号表达式的值为最后一个表达式的值4.逗号表达式中的前n-1个子表达式可以没有返回值5.逗号表达式按照从左向右的顺...原创 2019-01-17 00:49:10 · 303 阅读 · 0 评论 -
【c++深度解析2】C ++ 中构造函数的构造顺序和析构函数中的析构顺序
问题一 : 析构函数的顺序和构造函数的顺序有什么关系答:析构函数的顺序和构造函数的顺序相反问题二: 单个对象创建时构造函数的调用顺序是怎样的答:1.。先调用父类的构造过程(调用父类的构造函数) 2。再调用成员变量的构造函数(注意:该处构造函数的调用顺序只与申明时有关,与其在初始化列表的顺序无关). 3. 最后调用自身的构造函数问题三:有全局对象,栈对...原创 2019-01-05 22:16:07 · 376 阅读 · 0 评论 -
【c++深度解析1】c++中const关键字解析
问题一:在c++const关键字才真正定义了常量,那么c++中const 什么时候为只读变量?什么时候为常量?答:const常量的判断标准: 只有用字面量初始化的const常量才会进入符号表(const int i = 5 ) 使用其他变量初始化的const常量仍然是只读变量被 volatile 修饰的const 常量不会进入符号表(volatile ...原创 2019-01-05 22:55:18 · 179 阅读 · 0 评论