c++容易混淆知识点
C ++令人困惑的知识点
1 函数传递指针和传递引用之间的区别?
1 GT;指针定义可能未初始化,但引用不可能;
2 - ;引用只能与一个实体组合,指针可以与多个实体组合;
3 GT;加法和减法的含义是不同的。指向++的指针指示指针按类型字节向后偏移,而引用为+1,这类似;
4>评估的大小具有不同的含义。 Sizeof(指针)是指针占用的字节数,4位为32位平台,8位为64位平台(数组名称除外),sizeof(reference)是要使用的实体类型的大小。
5个没有空引用,但是有一个空指针;
6个有多个级别的指针,但没有多级引用;
7个引用比指针更安全,并且不必为空。
注意:也可以引用指针
2 C ++中的 包:
隐藏对象属性和实现细节,水龙头仅提供外部接口和对象进行交互,并结合数据和操作数据方法。
3 必须在构造函数的成员初始化列表中初始化的数据成员:
引用数据成员 const数据成员 类类型成员(该类没有默认构造函数)。
4 面向对象和面向过程的差异?
面向过程的编程方法使用函数(或过程)来描述数据的操作,但将函数与其操作的数据分开。
面向对象的编程方法是封装数据和对象的操作并将它们作为一个整体来处理。
面向过程的编程是以流程为中心的,难以维护。
面向对象的编程是以数据为中心的,数据在功能方面相对稳定,使其更易于维护。
5 静态关键字
Static可以修改局部变量 全局变量和函数。
装饰全局变量和函数时:使用文件范围中的可更改链接属性,该属性仅在当前文件中可用。
6修改局部变量时:
1.在静态区域打开;
生命周期是整个功能的运行时间;
3.默认初始化为0;
4.变量具有记忆功能,即每次保存最后一次呼叫后的值;
5.首次调用函数时创建,只调用一次构造函数。
7修改类的成员变量和函数:
静态成员由所有对象共享,不属于实例
8可以使用类名称:静态成员或对象(.static成员函数)访问类静态水龙头价格成员类静态成员变量必须在类中声明类外定义,而不定义static关键字
9类的静态成员函数没有默认的this指针,因此不能在其中使用非静态成员。
10静态成员与类的普通成员相同。
11它们还具有公共 受保护的 private3访问级别,并且还可以具有返回值,const修饰符和其他参数。
12。分配兼容性规则
子类对象可以直接分配给父对象。
父对象不能直接分配给子对象。
父类的指针或引用可以直接指向子类的对象。
指向子类的指针或引用不能直接指向给定给父类的对象(强可转换)。
13。多态性
概念:多态性指的是不同对象暴露于不同消息时的不同操作。
说明:当基类的指针或引用指向子类的对象时,它只能访问从派生类中的基类继承的成员,而不能访问派生类的新成员。引用虚拟函数可以解决这个问题。
动态绑定条件:为基类中的成员函数提供虚拟函数;调用虚拟函数时,必须由指向基类的指针或引用调用;必须在派生类中重写虚拟函数(同时满足这些要求)。
14。函数重载、同名隐藏、重写(重写/重写)
函数重载:函数名相同,作用域相同,参数列表不同(类型、编号、顺序)
同名隐藏:一个在基类中,一个在派生类中,具有相同的函数名
覆盖/覆盖:一个在基类中,一个在派生类中,所有虚拟函数,相同的函数名,相同的参数列表,相同的函数返回值(协方差除外)
协方差:返回值是指向基类的指针或引用,以及指向派生类的指针或引用。
15。当需要将析构函数设置为虚函数时
在多态场景中,当指向基类的指针或引用指向派生类对象时,由于指向基类的指针而调用基类的析构函数。此时,属于派生类的空间不会释放,从而导致内存泄漏,因此必须在此场景中设置基类的析构函数。作为虚函数,当调用析构函数时,将调用派生类的析构函数。
16。编译器什么时候为我们合成默认的构造函数?
1>有一个具有自己默认构造函数的类A定义。类B不显示定义自己的构造函数但包含类A的对象。在这种情况下,编译器将合成类B的默认构造函数以调用类A的现有构造函数。
2>如果B类和D类处于继承关系中(D类:公共B类),B类包含自己的默认构造函数,D类没有构造函数,编译器将为D类合成默认构造函数,并调用B类已有的默认构造函数。
3>在虚拟继承中,如果派生类不显示自己的构造函数,编译器将为其合成默认的构造函数,并在构造对象时指向对象前四个字节中的虚拟基表指针。
在多态性中,如果基类包含虚函数,而派生类不显示定义的构造函数,编译器将为其合成默认的构造函数,并将指向虚表(虚函数表)的指针存储在对象的前四个字节中。
17。创建虚拟表
基类:根据虚函数的声明顺序,将虚函数的地址一次性放入虚表中,最后一个位置为0。
派生类:首先复制基类的虚拟表
如果派生类重写了基类的某些函数,则派生类将虚拟表中具有相同廉价位置的函数修改为派生类本身的虚拟函数地址。
如果派生类添加了一个与基类不同的虚拟函数,它将被放置在虚拟表的末尾和0的末尾。
18。STL的六个组成部分:
容器、迭代器、算法、适配器、空间配置器、模拟函数(函数对象)
19。程序执行
预处理编译程序集链接执行
预处理:删除注释、宏替换、条件编译,包括头文件、添加行号、文件名等。
编译:词法分析、语法分析、语义分析、优化,然后生成相应的汇编代码
汇编:把汇编代码编程成计算机可以执行的二进制指令。
链接:导出符号表、地址重定向表、位分辨率符号表
执行:执行代码的特定逻辑
20。异常处理
C语言:
1>终止程序
2>返回一个指示
c++容易混淆知识点的更多相关文章
- Java-web易混淆知识点整理
Java-web易混淆知识点 post和get区别 post: 数据不会显示在地址栏 安全 大小无限制 可以提交二进制文件 get: 数据显示在地址栏 不安全 get方式提交有大小限制(约4kb) 相 ...
- php易混淆知识点
一.define(“constant”, “hello world”);和const constant = “hello world”;的区别? (0).使用const使得代码简单易读,const本 ...
- 关于Android代码混淆知识点
现在有反编译技术,容易得到源码,所以要混淆代码,加大反编译难度. 只需要在 build.grade 的配置文件中配置就可以了. proguardFiles getDefaultProguardFile ...
- 【PMP】易混淆知识点
一.混淆概念 德尔菲技术 德尔菲技术是组织专家达成一致意见的一种方法.项目专家匿名参与其中.组织者使用调查问卷就重要的项目议题征询意见,然后对专家的答卷进行归纳,并把结果反馈给专家做进一步评论.这个过 ...
- C++易混淆知识点整理
// 1 /////////////////////////////////////////////////////////////////////// // 常量指针:,指针可修改,变量不可修改(只 ...
- C语言之数组与指针的易混淆知识点
一.指针与数组 指针:指针本身也是一个变量,它的内容是指向的内容的地址.指针同样有类型的区分,char 的指针只能指向char型数据,int 指针指向int型数据.但是指针所占内存单元的大小(即其内容 ...
- C++之易混淆知识点二
1.数据抽象与封装 数据抽象是一种接口和实现相分离的编程技术,设计者关心的是如何实现这些接口,而使用者仅仅知道这些接口,抽象地考虑这些接口做什么的就可以了,不必去考虑如何实现这一层次. 封装是将低层次 ...
- CSS易混淆知识点总结与分享-定位与布局
CSS定位有四种模式:static.relative.absolute.fixed,其它static是默认值,下面分别讲解下各自的特点: static:静态定位,处于动态布局流中,按照页面中的各元素先 ...
- mysql易混淆知识点
1,join 和 union join连接属于表之间的水平操作,而union 是表之间的垂直操作.简单讲就是水平操作主要是为了获得列数据,垂直操作是为了获得行数据 cross join ...
随机推荐
- CDN概念
CDN的全称是Content Delivery Network,即内容分发网络.其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络"边缘" ...
- Android-Handler消息机制实现原理)(转)
Android-Handler消息机制实现原理 一.消息机制流程简介 在应用启动的时候,会执行程序的入口函数main(),main()里面会创建一个Looper对象,然后通过这个Looper对象开 ...
- .IllegalArgumentException: Mapped Statements collection does not contain 异常一例【我】
更新代码后发现几乎所有的sql查询都报错,类似下面: java.lang.RuntimeException: org.mybatis.spring.MyBatisSystemException: ne ...
- c++ for_each
#include<iostream>#include<algorithm>#include<vector>using namespace std; int main ...
- Spark2.0协同过滤与ALS算法介绍
ALS矩阵分解 一个 的打分矩阵 A 可以用两个小矩阵和的乘积来近似,描述一个人的喜好经常是在一个抽象的低维空间上进行的,并不需要把其喜欢的事物一一列出.再抽象一些,把人们的喜好和电影的特征都投到这个 ...
- .net framework 4.0 安装失败解决办法
方法一 1.打开cmd命令窗口 运行net stop WuAuServ 停止更新服务 2.开始----运行------输入%windir% 3.找到SoftwareDistribution的 ...
- jdk8环境下sprngboot/springmvc中JSR310新日期/时间类LocalDateTime显示效果带T
如图所示: 日期时间类中带了一个T,以上这种格式LocalDateTime格式化的时候默认日期时间格式:ISO.DATE_TIME(按笔者目前的知识理解是ISO8601规范中的日期时间格式化) 想要把 ...
- 详解用python实现简单的遗传算法
详解用python实现简单的遗传算法 今天整理之前写的代码,发现在做数模期间写的用python实现的遗传算法,感觉还是挺有意思的,就拿出来分享一下. 首先遗传算法是一种优化算法,通过模拟基因的优胜劣汰 ...
- Salt之CentOS7.5使用RPM包安装MySQL5.7.22
手动安装参考CentOS7.5使用RPM包安装MySQL5.7.22 目录结构为 install.sls文件 #按顺序分别安装commin libs client server #避免冲突安装comm ...
- 什么是ECS?