面试问题

本文整理了C++面试中常见的问题,包括指针与引用的区别、野指针的产生原因、如何用函数交换变量值的优化方法、数组与链表的不同、面向对象的特性、多态的概念及其实现,以及内存泄漏和内存溢出的解释。此外,还涉及了栈、队列、final、finally和finalize的区别、TCP与UDP的差异、软件开发流程、测试方法、CPU大小端模式和Linux目录操作等知识点。
摘要由CSDN通过智能技术生成

1. 指针和引用的区别

(1)引用只是变量的别名,内部是实现指针,引用不会分配内存空间,指针是实体,需要分配内存空间。指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。
(2)引用只能在初始化时被赋值,其他时候不能被改变,指针的值可以在任何时候改变
(3)引用不可以为空,指针可以为空
(4)引用变量内存单元保存的是被引用变量的地址
(5)“sizeof 引用” =指向变量的大小,“sizeof指针”=指针本身的大小
(6)引用使用在源代码级相当于普通变量一样使用,做函数参数时,内部传递的实际是变量地址。
(7)有多级指针,但是没有多级引用,只能有一级引用。
(8)指针和引用的自增运算结果不一样。(指针是指向下一个空间,引用时引用的变量值加1)

2. 野指针

野指针指向一个已删除的对象或申请访问受限内存区域的指针。
成因:(1)指针变量未初始化。(2)指针释放后未置空,delete只是把指针所指的内存给释放掉,但并没有把指针本身消除,释放后的指针应立即置null(3)指针操作超越变量作用域。如下

class A {
   
public:
  void Func(void){
    cout << “Func of class A” << endl; }
};
class B {
   
public:
  A *p;
  void Test(void) {
   
    A a;
    p = &a; // 注意 的生命期 ,只在这个函数Test中,而不是整个class B
  }
  void Test1() {
   
  p->Func(); // p 是“野指针”
  }
};

3. 用一个函数实现交换a和b的值

void swap(int*a, int*b)
{
   
	int temp = *a;//内容交换
	*a = *b;
	*b = temp;
}
有没有优化的方法

(1)异或(位运算)

void swap(int*a,int* b)
{
   
	*a^=*b;
	*b^=*a;
	*a^=*b;
}//a^a^b=b

(2)算术运算

void swap(int *a, int *b){
   
    *a = *a + *b;
    *b = *a -  *b;
    *a = *a -  *b;
}//a+b-b=a;

4. 数组和链表的区别(略)

5. 解释下面向对象

3大特性:封装、继承、多态
4种特性:封装、继承、多态、抽象

(1)封装:使代码模块化,把过程和数据包起来,通过已定义的接口访问数据,保证了对象被访问的隐私性和可靠性。
(2)继承:类的一种层次模型,其提供了一种明确表述共性的方法,对象的新类可以从现有的类中继承派生,类可以从他的基类那里继承方法实例变量,并且类可以修改增加新的方法使之更适合特殊的需要。继承可以扩展已存在的代码。
(3)多态性:是对象在不同时刻表现出来的多种状态,是一种编译时期状态和运行时期状态不一致的现象。
(4)抽象:是指对一类事物的高度提炼以得到共同的共性部分,抽象不需要了解全部细节,而只是一种通用的描述约束,抽象可以是过程抽象或者数据抽象。

补充:public,private,protected

protected表明成员变量以及方法对所有的用户是公开的,任何用户可以直接调用,对象可以访问。
private表明成员变量以及方法是私有的,只有类内成员以及友元函数可以访问,对象不可以访问。
protected表明该类中的函数、子类的函数、以及其友元函数可以访问。但不能被该类的对象访问。

protected继承:public变为protected,其他属性不变<

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值