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>返回一个指示

猜你喜欢

转载自www.cnblogs.com/blogst/p/11349933.html
今日推荐