c++经典问题

1.union共同体和struct结构体的区别

  • struct和union都是由多个不同的数据类型成员组成
  • 同一时刻,union只存放了一个数据成员,而struct的所有成员都存在
  • 在struct中,每个成员都有自己的内存,它们同时存在,在union中,所有成员不能同时占用各自的一块内存,因此不能同时存在,只能存在一个
  • struct的长度为所有成员长度之和,union的长度为最长成员的长度
  • 对union不同成员赋值会重写其他成员,而struct的不同成员之间的赋值互不影响

2.static的作用

  • 修饰局部变量,改变了局部变量的存储区(栈->静态存储区)以及生命周期(离开作用于之后,并未被销毁,仍然驻留在内存,直到程序销毁,但是我们不能再对它进行访问),但未改变其作用域。
  • 修饰全局变量和函数,并未改变其存储位置及生命周期,而改变了其作用域,使当前文件外的源文件无法访问该变量和该函数。
  • 修饰类的成员变量,使其成为类的全局变量,被类的所有对象共享。
  • 修饰类的成员函数,所有对象共享该函数,函数属于类的,不需要创建对象即可访问;静态成员函数只能访问静态成员变量,不可访问非静态成员变量。

3.const的作用

  • 限定变量为不可修改
  • 限定成员函数不可以修改任何数据成员
  • 不可以同时用const和static修饰成员函数

4.指针和引用的区别

  • 指针是变量,存放变量的地址,占用4Byte或者8Byte,引用是别名,不占用内存空间
  • 指针可以为空,可以声明之后再初始化,引用必须在声明的时候初始化,而且初始化之后不可再改变
  • 指针可以有多级,引用不可以

5.重载、重写、隐藏的区别

Overload(重载):在C++程序中,可以将语义、功能相似的几个函数用同一个名字表示,但是参数或者返回值不同

  • 相同的范围(同一个类中)
  • 函数名相同
  • 参数或者返回值不同
  • virtual关键字可有可无

Override(重写):派生类函数覆盖基类函数,用于多态

  • 不同的范围(分别位于基类和派生类)
  • 函数名相同
  • 参数和返回值相同
  • 必须有virtual关键字

Overwrite(隐藏),派生类函数屏蔽与其同名的基类函数规则如下

  • 派生类与基类函数同名,但是参数不同,基类函数将被隐藏
  • 派生类与基类函数同名,并且参数相同,但是基类函数没有virtual关键字,基类函数将被隐藏

6.虚函数与虚函数表相关知识点

  • 多态是由虚函数实现的,而虚函数主要是通过虚函数表(V-Table)来实现的。
  • 类中若有virtual修饰的成员函数,该类就会有一个虚函数表
  • 该类定义的对象会有一个虚函数指针指向类的虚函数表,原始基类的对象的虚函数指针指向基类的虚函数表
  • 有纯虚函数的类为抽象类,不能被实例化。

7.C++中struct和class的区别

  • 默认继承权限
  • 成员的默认访问权限

8.数组指针和指针数组

  • int (*ptr)[5],数组的指针相当于二维数组,也就是指针的指针
  • int *ptr[5],指针数组是一个数组,数组存放的元素为指针

9.strlen和sizeof的区别

  • strlen是函数,在运行时才能计算,返回字符串的长度,必须以‘\0’结尾;sizeof是运算符,在编译时就计算好了。

10.进程和线程

  • 进程是程序指令和相关资源的集合,是程序的运行实体,一个进程可以包含多个线程
  • 进程是资源分配的基本单位,线程是程序调度的基本单位,线程共享进程的资源(动态堆,静态存储区,代码段),但是具有自己独立的栈空间和寄存器
  • 进程的频繁切换需要包含进程资源的保护和恢复动作,因此会引起多额外的开销进而影响系统的性能,另外进程间的通信要求复杂的系统级实现,线程的切换比较快,容易实现并发,而且可以通过共享资源的方式进行多线程之间的通信,但是需要考虑同步的问题。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值