栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++面试题

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++面试题

1、C++指针和引用的区别

1.指针是保存存储地址 一般需要初始化为NULL

2.引用是取别名(类似小名),定义时候一定要初始化,不能为NULL

3.引用不占用字节,但引用不可以改变:引用和变量指向同一片内存

4.指针占4个字节,指针可以指向不同的地址,可改名

5.引用比指针使用起来简洁、安全(警惕野指针!!!)

6. 在sizeof中含义不同:引用结果为引用类型的大小,指针始终是地址空间所占字节个数(32位:4字节   64位:8字节)

7. 引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小

8. 有多级指针,但是没有多级引用

9. 访问实体方式不同,指针需要显式解引用,引用编译器自己处理

2、C++重写和重载的区别

重载(overload):函数名相同,函数的参数个数、参数类型或参数顺序三者中必须至少有一种不同。函数返回值的类型可以相同,也可以不相同。发生在一个类内部,不能跨作用域。也就是说用同一个函数完成不同的功能

重写(override):也叫做覆盖,一般发生在子类和父类继承关系之间。子类重新定义父类中有相同名称和参数的虚函数,返回值可以不相同,但是必须是父子关系的指针或引用.

重写需要注意:

1、 被重写的函数不能是static的。必须是virtual的

2 、重写函数必须有相同的类型,名称和参数列表

3 、重写函数的访问修饰符(public/private/protected)可以不同。

3、什么是进程

程序的执行实例被称为进程(process)。简单来说:进程是动态的概念,指的是程序的一次运行活动,通俗来说就是程序跑起来了,系统中就多了一个进程。程序的一次执行过程。

4、什么是程序

程序(program)是存放在磁盘文件中的可执行文件。静态的。

5、程序和进程的区别

 a> 程序是指令和数据的有序集合,是一个静态的概念。而进程是程序在处理机上的一次执行过程,它是一个 动态的概念。

b> 程序可以作为一种软件资料长期存在,而进程是有一定生命期的。程序是永久的,进程是暂时的。

c> 进程是由进程控制块、程序段、数据段三部分组成;

d> 进程具有创建其他进程的功能,而程序没有。

 e> 同一程序同时运行于若干个数据集合上,它将属于若干个不同的进程,也就是说同一程序可以对应多个进 程。

 f> 在传统的操作系统中,程序并不能独立运行,作为资源分配和独立运行的基本单元都是进程。

6、为什么要使用进程

如果程序在运行的过程中,频繁的请求IO操作,那么CPU就会等待该程序的IO操作完成后再为其服务,这就极大的浪费了CPU资源,降低CPU效率。因此采用一种“程序排队”机制来提高CPU利用效率,从而产生了进程。

7、深拷贝和浅拷贝区别及使用场景
  1. 拷贝构造函数:它是一种特殊的构造函数,由编译器调用来完成一些基于同一类的其他对象的构件及初始化。
  2. 使用场景

1、函数参数中以值传递的方式传入时,会将传入的实际参数拷贝一份

2、函数返回中返回了一个局部对象,会将其拷贝一份并返回

3、再给一个对象初始化的时候(不是赋值)会将值拷贝一份。

3、什么是深拷贝和浅拷贝

浅拷贝:只是对指针的拷贝,拷贝后两个指针指向同一个内存空间。

深拷贝:不但对指针进行拷贝,而且对指针指向的内容进行拷贝,经过深拷贝后的指针是指向两个不同地址的指针。也就是程序员自己编写的拷贝构造函数。

重点:系统默认生成的拷贝构造函数是浅拷贝。

浅拷贝造成的问题

(1)浅拷贝只是拷贝了指针,使两个对象的指针指向同一地址,在对象结束的时候,会造成同一块内存资源析构两次,造成程序崩溃。

(2)指针指向同一块内存,任何一方有改动都会影响另一方。

(3)在释放内存时,后者的内存先释放会导致前者内存也释放,导致空间不能再被利用。

而以上这些问题就可以使用深拷贝来进行避免。

8、New和mallloc的区别

malloc开辟一块内存,不进行初始化(动态开辟内存)。new用于开辟内存,进行初始化(动态内存管理)。

1.malloc 以及free都是函数(C语言) 而new delete都是运算符(C++),都开在堆区

2.malloc指定开辟空间大小,new不需要,知道类型即可

3.malloc 返回void*,一般强制转换;new 不需要

4.malloc开free收 new开delete释放

5.new内存分配失败时,会抛出bac_alloc异常。malloc分配内存失败时返回NULL。

6.new不仅能开辟内存,还能进行初始化 malloc只能开辟内存,不能初始化

7.new开辟的内存叫做自由存储区 malloc开辟的内存叫做堆区

8.new可以重载 malloc不能重载

9.new开辟数组时用[  ]传入数组的大小  

10.new在创建类的时候,会默认调用构造函数,而malloc不会。

11.delete会默认调用类的析构函数,而free不会

12.如果父类的析构函数有写虚函数的关键字,当子类被析构的时候,会默认调用父类的析构函数。

9、简述通用链表的原理

是一个链式结构,其中至少包含一个指针域和一个数据域。如果只包含一个,就表示指针域时指向下一个节点。如果是双向链表,其中包含一个数据域和两个指针域。一个指针域指向上一个节点,一个指针域指向下一个节点。通常情况下,链表的添加是尾部添加,当然也有中间插入的,主要是要看是什么容器。删除节点:list容器可以从中间删除和尾部删除。队列只可以头部删除,尾部追加,不存在数据插入。

10、模板类和类模板的区别及作用

模板类是类,类模板是模板。类模板是需要我们自己去写(将逻辑什么的写好放入),而模板类是将写好的类模板将参数传递进去。容器本来就是一个模板类。它的底层原理就是模板类。

暑期编程PK赛 得CSDN机械键盘等精美礼品!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1015907.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号