C++ 41-60
🌊 41 有几种 new
plain new
nothrow new 不抛异常而是返回nullptr
placement new 已经分配内存, 调用构造
🌊 42 C++的异常处理的方法
异常, 比如: 数组下标越界, 除数为0, 动态分配空间时空间不足
要及时对这些异常进行处理, 否则程序很可能报错
(1)try, throw, catch 关键字
try{
if(抛出异常的条件) throw - 1
}
catch(刚才抛出的异常){
进行异常的处理
}
(2)函数异常声明列表
知道整个函数里面可能会发生什么异常
int function() throw(int,double,A,B))
代码里面没跑通(不允许动态异常规范?什么东西)
(3)C++ 标准异常类 exception
🌊 43 static的用法和作用?
1 最重要: 隐藏
同时编译多个文件时, 加上static的全局变量不具有全局可见性
2 保持持久
处于静态数据区的变量在程序开始运行时候就进行了初始化. static变量和全局变量都处于静态数据区; 区别
3 默认 0
4 类成员??
🌊 44 指针和const的用法
const修饰左边的, 左边没有就修饰右边的
修饰指针, 叫做顶层指针
修饰指向的值, 指针叫做底层指针
🌊 45 形参与实参的区别?
形参调用才分配内存, 结束即释放.因此形参只在函数内部有效.
实参可以是常量/变量/表达式/函数.在进行函数调用的时候, 必须具有确定值(赋值,输入).
要注意的是, 形参和实参必须在类型/顺序/数量上严格一致;函数调用中数据单项传递, 只能由实参传给形参.非指针时, 形参将实参复制一遍, 实参内容不变.
🌊 46 值传递、指针传递、引用传递的区别和效率
都有一个形参向函数所属栈拷贝数据的过程.
不同的是, 引用传递针对地址, 相当于为数据所在的地址起了一个别名.值传递和指针传递都是传值, 不同在于值传递拷贝整个数据;而指针传递只拷贝地址到栈中.
效率上, 指针传递和引用传递比值传递效率高. 一般主张用引用传递, 代码逻辑上更紧凑清晰.
🌊 47、静态变量什么时候初始化
初始化只有一次
静态变量和全局变量一样都存发给在全局区域. 在主程序前编译器就已为其分配好内存.
C和C++有区别.
C++中在执行相关代码时才会初始化.C++引入对象后, 要初始化必须执行对应的构造和析构函数,并非简单的分配内存.所以C++中可以用变量对静态局部变量进行初始化.
🌊 48、const关键字的作用有哪些?
阻止一个变量被改变. 以至于在定义时就要初始化,否则没机会了.
对指针来说, 可以指定指针本身或指针指向的值或者两者为const.
函数声明, 修饰形参
类成员函数 常函数, 不能修改类的成员变量
类成员函数返回值
const_cast 可以解除const
指针和引用传递时, 保护实参所指向的变量不被改变
🌊 49、什么是类的继承?
定义: 一个类继承了另一个类的属性和方法, 这个类被称为子类, 被继承的类被成称为父类
类与类的关系
is a 继承
此外还有
has a 包含
use a 使用 友元/传参
特点: 子类当父类用
访问控制: public protected private
🌊 50、从汇编层去解释一下引用
栈悬在空中
高地址
低地址
储存的原变量的地址放入一个新变量中
int x=1;
int& b=x;
🌊 51、深拷贝与浅拷可以描述一下吗?
浅拷贝:复制了一个指针指向原来的值, 只要原来的值变动, 复制的值自然也会变动.多个指针指向同一块内存, 当一个指针把内存释放了, 就会导致其余指针编程悬空指针.
深拷贝:开辟一块新的内存地址来存放拷贝的数据
🌊 56 malloc与free的实现原理?
底层是一些系统调用
🌊 57 malloc calloc realloc
随机分配 初值0分配 扩容
🌊 58 类成员初始化方式?构造函数的执行顺序 ?为什么用成员初始化列表会快一些?
赋值初始化:在函数体内进行赋值初始化; 列表初始化:在函数后面使用冒号来初始化
赋值初始化是在分配内存之后进行初始化; 列表初始化时在分配内存时进行初始化.
虚拟父类的构造函数->父类的构造函数->类成员对象的构造函数->子类的构造函数
赋值初始化是赋值, 会产生临时对象, 这会降低程序运行速度. 成员初始化是单纯的初始化.
🌊 59 有哪些情况必须用到成员列表初始化?作用是什么?
初始化引用成员
初始化常量成员
调用一个构造函数, 而它有一组参数??什么意思
作用: 编译器会一一操作初始化列表, 使其在构造函数内依次初始化
🌊 60 C++中新增了string,它与C语言中的 char *有什么区别吗?它是如何实现的?
string 继承子basic_string,对char进行了封装, 包括char 的容量/长度等属性
string 可以进行动态扩展, 进项2倍扩容, 将原来的字符串复制过去, 再在后面加上新的内容