[00] C++面试基础知识【整理】

1. static关键字的作用

1.1 全局的静态变量

  • 存储区:全局变量前加static关键字, 全 局 变 量 \color{#0000FF}{全局变量} 就变成了 全 局 静 态 变 量 \color{#0000FF}{全局静态变量}
  • 初始化:未经初始化的全局静态变量会自动初始化为0
  • 作用域:全局静态变量只在当前源文件可见,其它文件不可见

1.2 局部的静态变量

  • 内存位置:在局部变量前加static关键字,存储位置由函数栈变更为静态存储区
  • 初始化:未经初始化的局部静态变量会自动被初始化为0
  • 作用域:作用域仍然为局部作用域,当定义它的函数或者语句块结束的时候,作用域结束。但是局部静态变量离开作用域以后,并没有销毁,而是继续驻留在内存中(静态全局变量在程序运行期间一直存在),只不过我们不能继续访问,直到函数再次被调用,并且值保持不变

1.3 静态函数

  • 静态函数与普通函数的区别是:用static修饰的函数,限定在本源码文件中,不能被本源码文件以外的代码文件调用。而普通的函数,默认是extern的,也就是说它可以被其它代码文件调用
  • 好处一:其它文件中可以定义重名函数,不会发生函数名冲突
  • 好处二:不能被其它源文件引用

1.4 类的静态成员

  • 类的静态成员是的共享数据,静态成员只存储在一处,对类的所有实例化对象来说,共享该静态成员
  • 使用类的静态成员不会破坏隐藏性原则,保证了安全性

1.5 类的静态函数

  • 和类的静态成员函数一样,是的共享函数,不属于任何一个类的实例化对象
  • 因为类的静态成员函数不属于任何一个具象的类实例,所以该函数中不包含this指针,所以不能访问类的非静态成员,只能访问类的静态成员

2. 说一下C和C++的区别

2.1 设计思想上

  • C++是面向对象的语言,而C是面向过程的结构化编程语言

2.2 语法上

  • C++具有封装、继承和多态三种特性
  • C++相比C,增加许多类型安全的功能,比如强制类型转换
  • C++支持泛型编程,比如类模板、函数模板等

3. C++中四种cast转化

在说四种转化之前先说两个概念:

向上转化:指的是子类向父类转化
向下转化:指的是父类向子类转化

C++中四种cast转化分别是:static_cast、dynamic_cast、const_cast和reinterpret_cast转化

3.1 static_cast转化

  • 用于各种隐式转化,比如非const转化为const、void *转化为指针
  • static_cast能用于多态向上转化,向下转化可以成功,但是不安全,结果未知

3.2 dynamic_cast

  • 用于动态类型转化。只能用于含有虚函数的类,用于类层次间的向上和向下转化
  • 只能转指针或者引用
  • 向下转化时:如果转的是非法的指针,返回NULL指针;如果转的是非法引用,则抛异常
  • 通过判断在执行到该语句时变量的类型和要转化的类型是否相同,来判断能否进行向下转化

3.3 const_cast

  • 用于将const变量转化为非const变量

3.4 reinterpret_cast

  • 几乎什么都可以转,比如将int转化为指针,可能会出问题,所以少用

题 外 话 \color{#FF00FF}{题外话}

C的强制类型转化表面上看功能强大,几乎什么都能转,但是转化不够明确,不能进行错误检查,容易出错

4. 请说一下C++指针和引用的区别

  • 指针有一段自己的内存空间,而引用则是一个变量的别名
  • 使用sizeof来计算指针的空间结果时4,而引用则是被引用对象的大小
  • 指针可以被初始化为NULL,而引用则必须被初始化为一个已经存在的对象的引用
  • 作为参数传递时,指针需要解引用(*)才能操作被指向的对象,而引用则可以直接操作对象
  • 可以用const类型的指针,没有const类型的引用
  • 指针在使用的过程中可以更改指向的对象,而引用一旦被初始化,中途不可以被改变
  • 指针可以有多级指针,引用只有一级
  • 如果返回动态内存分配的对象时,必须用指针,引用可能会导致内存泄漏

5. 请你回答一下野指针是什么

野指针就是指向一个已经删除的对象或者未申请访问受限内存区域的指针

6. 虚函数是怎样实现运行时多态的

  • 子类会继承父类的虚函数表(该虚函数表是一个虚函数指针的数组)
  • 如果子类重写虚函数(比如重写func函数),则会将子类的func虚函数指针替换掉父类的func虚函数指针
  • 在运行时会调用子类的func函数

7. C语言形参压栈的顺序

  • 从右到左

持续补充…

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

博可睿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值