没有合适的资源?快使用搜索试试~ 我知道了~
c++面试题2023版
9 下载量 25 浏览量
2023-10-28
11:47:34
上传
评论 2
收藏 1.01MB PDF 举报
温馨提示
试读
47页
适用于1.5w左右及以下面试者
资源推荐
资源详情
资源评论
c++面试题
一:编程基础
<1.语法基础
1.关键字类
1.new、delete、malloc、free 关系**
delete 会调用对象的析构函数,和 new 相应 free 只会释放内存,new 调用构造函数。
malloc 与 free 是 C++/C 语言的标准库函数,new/delete 是 C++的运算符。它们都可用于申请动态内存和释放内存。对
于非内部数据类型的对象而言,光用 maloc/free 无法满足动态对象的规定。对象在创建的同时要自动执行构造函数,对
象在消亡之前要自动执行析构函数。由于 malloc/free 是库函数而不是运算符,不在编译器控制权限之内,不可以把执行
构造函数和析构函数的任务强加于 malloc/free。因此 C++语言需要一个能完毕动态内存分派和初始化工作的运算符 new,
以及一个能完毕清理与释放内存工作的运算符 delete。注意 new/delete 不是库函数。
new 和 malloc 的区别
(1) new 是关键字,需要编译器支持;malloc 是库函数,需要头文件支持 new 和 delete 配合使用,new 数组时候,释
放时需要使用 delete[] malloc 和 free 配合使用 (2) new 是类型安全的,在申请内存时,不需要进行类型转换 malloc 需
要强制类型转换 (3) new 一个类对象或者结构体对象时,会自动的调用构造函数,delete 会自动调用析构函数 malloc
不会自动调用,free 不会 (4) new 申请内存失败后,会抛出 bad_alloc 异常 malloc 申请内存失败后,返回的 NULL
2.delete**与** delete []**区别**
delete 只会调用一次析构函数,而 delete[]会调用每一个成员的析构函数。在 More Effective C++中有更为具体的解释:
“当 delete 操作符用于数组时,它为每个数组元素调用析构函数,然后调用 operatordelete 来释放内存。”delete 与 New
配套,delete []与 new []配套
MemTest* mTest1=newMemTest[10];
MemTest* mTest2=newMemTest;
int*pInt1=newint[10];
int*pInt2=newint;
delete[]pInt1; //-1-
delete[]pInt2; //-2-
delete[]mTest1;//-3-
严禁复制
delete[]mTest2;//-4-
在-4-处报错。
这就说明:对于内建简朴数据类型,delete 和 delete[]功能是相同的。对于自定义的复杂数据类型,delete 和 delete[]不
能互用。delete[]删除一个数组,delete 删除一个指针简朴来说,用 new 分派的内存用 delete 删除用 new[]分派的内存
用 delete[]删除 delete[]会调用数组元素的析构函数。内部数据类型没有析构函数,所以问题不大。假如你在用 delete 时
没用括号,delete 就会认为指向的是单个对象,否则,它就会认为指向的是一个数组。
3.Ado**与 Ado.net 的相同与不同?**
除了“可以让应用程序解决存储于 DBMS 中的数据“这一基本相似点外,两者没有太多共同之处。但是 Ado 使用 OLE DB
接口并基于微软的 COM 技术,而 ADO.NET 拥有自己的 ADO.NET 接口并且基于微软的.NET 体系架构。众所周
知.NET 体系不同于 COM 体系,ADO.NET 接口也就完全不同于 ADO 和 OLE DB 接口,这也就是说 ADO.NET 和
ADO 是两种数据访问方式。ADO.net 提供对 XML 的支持。
4.New delete** 与**malloc free** 的联系与区别**?**
答案:都是在堆(heap)上进行动态的内存操作。用 malloc 函数需要指定内存分派的字节数并且不能初始化对象,new 会
自动调用对象的构造函数。delete 会调用对象的 destructor,而 free 不会调用对象的 destructor.
5.有哪几种情况只能用 intialization list** 而不能用**assignment?**
1.当类中具有 const、reference 成员变量,对象成员;基类的构造函数都需要初始化。
2.当基类有带参构造,子类就应当声明一个将参数传递给基类构造函数的途径。3.当基类派生子类对象时,就要对基类
数据成员等初始化。
(1)
#include<iostream> using namespace std;
class A {private: const int a; // const 成员 const int b; // const 成员 public: A(int i, int j) : a(i), b(j) { }// 必须在这里初始
化 };
int main() { A a(1,2); return 0; }
(2)
#include<iostream> using namespace std;
class A { private: int x1; public: A(int i) { // 只有一个带参的构造函数 x1 = i; } }; class B : public A { private: int x2; public:
B(int i) : A(i + 10) { // 必须在这里初始化 x2 = i; } };
int main() { B b(2); return 0; }
严禁复制
6.struct** 和 class 的区别
答案:struct 的成员默认是公有的,而类的成员默认是私有的。struct 和 class 在其他方面是功能相称的。从感情上讲,
大多数的开发者感到类和结构有很大的差别。感觉上结构仅仅象一堆缺少封装和功能的开放的内存位,而类就象活的并
且可靠的社会成员,它有智能服务,有牢固的封装屏障和一个良好定义的接口。既然大多数人都这么认为,那么只有在
你的类有很少的方法并且有公有数据(这种事情在良好设计的系统中是存在的!)时,你也许应当使用 struct 关键字,
否则,你应当使用 class 关键字。
7.软件开发五个重要 step 是什么?**
a 需求分析: 分析并拟定用户需求,用采用适当的模型规范地表述这一需求,形成分析模型为要解决的现实世界中的事
物建立抽象建模。 b 系统设计: 设计阶段:拟定系统如何实现所需的功能----采用适当的数据结构+控制逻辑,将分析
模型细化。 c 编码实现: 选定一种适当的编程语言,编码实现上述的设计,并在开发过程中引入测试,完善整个解决
方案。 d 测试阶段 e 系统维护
你在开发软件的时候,这 5 个 step 分别占用的时间比例是多少?
8.make file 文件的作用是什么?
Make file 是一种包含构建项目规则的文本文件,通常用于编译源代码文件以生成可执行程序、库文件或其他构建目标。
它是与构建工具 make 一起使用的,make 根据 Makefile 中的规则来管理项目的编译和构建过程。Makefile 包含了文件
之间的依赖关系以及如何将源代码转换为可执行文件的步骤。通过执行 make 命令,可以根据 Makefile 中定义的规则
自动构建项目,确保只编译已更改的文件,从而提高效率。
9.UNIX 显示文件夹中,文件名的命令是什么?能使文件内容显示在屏幕的命令是什么 ?
要显示文件夹中的文件名,可以使用 ls 命令。例如,要列出当前目录中的文件和子目录,可以在终端中运行
以下命令:
ls
要将文件的内容显示在屏幕上,可以使用 cat 命令或其他类似的命令。例如,要查看文件的内容,可以运行
以下命令:
cat 文件名
其中,"文件名"是要查看的文件的名称。
严禁复制
如果希望在终端中分页查看文件内容,还可以使用命令 more 或 less,例如:
more 文件名或 less 文件名
这些命令允许您逐页查看文件内容,适用于较大的文件。
10.static 有什么用途?(请至少说明两种)**
答:在 C 语言中,static 重要定义全局静态变量,定义局部静态变量,定义静态函数
1.定义全局静态变量 :在全局变量前面加上关键字 static,该全局变量变成了全局静态变量。全局静态变量有以下特点:
(1) 在全局数据区内分派内存
(2) 假如没有初始化,其默认值为 0
(3) 该变量在本文件内从定义开始到文件结束可见
2.定义局部静态变量:在局部静态变量前面加上关键字 static,该局部变量便成了静态局部变量。静态局部变量有以下
特点:
(1) 该变量在全局数据区分派内存
(2) 假如不显示初始化,那么将被隐式初始化为 0
(3) 它始终驻留在全局数据区,直到程序运营结束
(4) 其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束。
3.定义静态函数:在函数的返回类型加上 static 关键字,函数即被定义成静态函数。静态函数有以下特点:
(1) 静态函数只能在本源文件中使用
(2) 在文件作用域中声明的 inline 函数默认为 static
说明:静态函数只是一个普通的全局函数,只但是受 static 限制,他只能在文件坐在的编译单位内使用,不能呢个在其
他编译单位内使用。
在 C++语言中新增了两种作用:定义静态数据成员或静态函数成员
1.定义静态数据成员。
静态数据成员有如下特点:
严禁复制
(1) 内存分派:在程序的全局数据区分派
(2) 初始化和定义:静态数据成员定义时要分派空间,所以不能在类声明中初始化。
2.静态成员函数。
静态成员函数与类相联系,不与类的对象相联系。静态成员函数不能访问非静态数据成员。因素很简朴,非静态数据成
员属于特定的类实例,静态成员函数重要用于对静态数据成员的操作。
(1) 静态成员函数没有 this 指针。
11.关键字 static 的作用是什么?**
这个简朴的问题很少有人能回答完全。在 C 语言中,关键字 static 有三个明显的作用:
1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。
它是一个本地的全局变量。
3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块
的本地范围内使用。
大多数应试者能对的回答第一部分,一部分能对的回答第二部分,同是很少的人能懂得第三部分。这是一个应试者的严
重的缺陷,由于他显然不懂得本地化数据和代码范围的好处和重要性。
一方面 static 的最重要功能是隐藏,另一方面由于 static 变量存放在静态存储区,所以它具有持久性和默认值 0。
12.不能做 switch()的参数类型是:**
答 、switch 的参数不能为实型。
由于 switch 后面只能带自动转换为整形(涉及整形)的类型,比如字符型 char,unsigned int 等,实数型不能自动转换为整形.
可以手动强转实数型(int)double,但是会导致精度的丢失.假如后面要对实数型做选择的话,可以乘以 10 的倍数,然后进行
选择,这样不会丢失精度.但是这样的话就要靠你去手动的控制乘以多少了
13.对于一个频繁使用的短小函数,在 C 语言中应用什么实现,在 C++中应用什么实现?
答 、c 用宏定义,c++用 inline,内联函数是指用 inline 关键字修饰的函数
14.预解决器标记#error 的目的是什么?
程序遇到可预判的错误的结果不崩溃报错
15.关键字 const 是什么含意?**
严禁复制
剩余46页未读,继续阅读
资源评论
散风少年
- 粉丝: 7
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功