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

image

🌊 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倍扩容, 将原来的字符串复制过去, 再在后面加上新的内容

posted @ 2023-06-20 22:26  无形深空  阅读(9)  评论(0编辑  收藏  举报