搜狗2017 C++笔试题.pdf
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
【C++笔试题详解】 1. 重载与多态的理解 在C++中,重载(Overloading)指的是在同一作用域内可以有多个同名但参数列表不同的函数。这意味着,通过不同的参数类型或数量,编译器能够区分这些同名函数。而多态(Polymorphism)是指同一个接口,可以通过不同的子类型来调用,它主要通过虚函数(virtual function)实现。在C++中,重载并不依赖于继承,可以在非面向对象的环境中使用,而多态通常是在继承体系中用于实现动态绑定。因此,选项A错误,B正确,C错误,D错误。如果父类中的方法被声明为虚函数,那么通过父类指针调用时,会根据实际的对象类型调用对应的方法。 2. 游戏策略问题 这是一个典型的博弈论问题,称为nim游戏。当小明面对两堆硬币,分别为12和13个时,他可以通过先取走1个硬币,使得两堆硬币数量相同(均为11个)。之后,无论小亮从哪一堆取走1或2个硬币,小明都可以从另一堆取走相同数量的硬币,从而保持两堆数量相等。如此,小明总能保证最后一堆硬币归他所有,因此小明应该选择自己先取硬币,选项C正确。 3. 构造与析构过程分析 当执行`b2 = func(b1)`时,首先`b1`通过引用传递到`func`,触发拷贝构造函数创建一个临时对象。然后在`func`内部,返回语句`return rhs;`不会导致 NRVO(Named Return Value Optimization),因此会调用拷贝构造函数复制`rhs`。函数`func`结束后,临时对象被析构。返回值被赋值给`b2`,这会触发拷贝赋值运算符`operator=`。所以,选项D正确,涉及了拷贝构造函数、析构函数和拷贝赋值运算符。 4. `fork()`与内存分配 `fork()`函数创建了一个子进程,这个过程中父进程和子进程的内存空间是复制的,但不是共享的。因此,父子进程中`num`的初始值是相同的,但各自的地址是不相同的,因为它们在各自的内存空间中有各自的副本。所以选项A正确,父子进程中输出的`num`相同,但地址不相同。 5. 内存区域分配 - `a`是全局变量,所以它存储在全局变量区,选项D正确。 - `b`是类`someClass`的实例成员,因此它存储在对象实例所在的堆区,选项A正确。 - `c`是类`someClass`的静态成员,它存储在全局静态区,选项B错误。 - `d`在`main`函数内部定义,因此存储在栈区,选项C正确。 6. 代码问题检查 - A. 选项`func1`的代码中,`p1`指向的内存是通过`malloc`分配的,然后使用`sprintf`填充,最后调用`local_log`,看起来没有明显的错误。 - B. 选项`func2`的代码中,`fscanf`从文件读取数据到`key`,也没有明显问题。 - C. 选项`func3`的代码段未给出,无法判断。 总结: 搜狗2017年的C++笔试题涉及到重载和多态的概念、博弈论策略、构造函数和析构函数的调用顺序、`fork()`函数的使用以及内存区域的分配。对于C++程序员来说,这些知识点是基础且重要的,理解和掌握它们对于编写高效、可靠的代码至关重要。在面试或笔试中,对这些概念的深入理解能够展现出候选人的专业水平。
剩余16页未读,继续阅读
- 粉丝: 1w+
- 资源: 6万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助