搜狗2017 C++笔试题解析

版权申诉
0 下载量 87 浏览量 更新于2024-07-08 收藏 846KB PDF 举报
"搜狗2017年的C++笔试题包含了面向对象编程、游戏策略以及内存管理等知识点。" 这篇文档中提供的搜狗2017年C++笔试题涉及了多个C++编程的关键概念,包括重载、多态、类的继承、游戏策略以及函数返回值的优化。下面是对这些知识点的详细解释: 1. 重载和多态: A. 正确的理解是,如果父类和子类都有相同名称但参数不同的方法,在使用父类指针调用时,如果没有声明为虚函数,实际调用的是父类的方法。这是因为C++中的多态性是基于虚函数实现的。选项B和C不正确,因为重载可以在非子类方法中使用,而多态并不局限于子类。D选项也错误,因为A类的成员函数应该声明为public,并且调用成员函数需要使用箭头操作符或点操作符。 示例代码中,`a->test(1.1)`或`(*a).test(1.1)`将调用父类A的方法,如果`test`声明为`virtual`,则会调用子类B的方法,输出2。 2. 游戏策略(动态规划): 这是一个典型的博弈论问题,称为Nim游戏。当两堆硬币数分别为12和13时,小明通过先取一个硬币,使得两堆都变为偶数个,然后通过模仿对手的取法,保证每一轮结束后两堆硬币数相等,从而确保胜利。无论小亮取1个还是2个,小明都能通过在另一堆中取相同数量的硬币达到目的。 3. 编译器优化(NRVO): NRVO(Named Return Value Optimization,命名返回值优化)是一种编译器优化技术,它避免了在函数返回时创建临时对象的开销。在这段代码中,如果编译器进行了NRVO优化,那么在第6行的`return rhs;`处,编译器可能会直接将`rhs`的值复制到`b2`,跳过中间临时对象的创建。然而,如果不考虑NRVO,那么`func`函数返回一个临时对象,这个临时对象再被赋值给`b2`。 以上就是这份笔试题中涉及到的C++编程核心概念,包括面向对象的特性、游戏策略分析以及编译器优化的影响。理解和掌握这些知识点对于C++开发者来说至关重要。