搜狗搜狗2016 C++笔试题笔试题
搜狗2016C++研发工程师笔试题 (网上收集整理的,参考答案在后面,若有错误请大神指出)
1.关于重载和多态正确的是?
A.如果父类和子类都有相同的方法,参数个数不同,将子类对象赋给父类后,由于子类继承于父类,所以使用父类指针调用父类方法
时,实际调用的是子类的方法;
B.选项全部都不正确
C.重载和多态在C++面向对象编程中经常用到的方法,都只在实现子类的方法时才会使用
D.
class A{
void test(floata){cout<<"1";}
};
class B:public A{
void test(intb){cout<<"2";}
};
A *a=new A;
B *b=new B;
a=b;
a.test(1.1);
结果是1
解析:A中由于没有说明使用虚函数,使程序有多态性,所以实际是调用父类的方法;
C中重载在一般函数中也会使用;
D中,题目有2个错误,class A中,需添加成员函数的Public访问属性,否则在类外不能访问成员函数,并且指针对象的访问
方式只能使用间接访问方式,即a->test(1.1)或者(*a).test(1.1),同样,由于没有多态性,输出结果为1,若class A中test函数
为virtual,则输出2
2.现有两堆硬币,小明和小亮玩游戏,每次每人只能从其中一堆中取走1个或2个硬币,最后将硬币取完者算作胜利,当两堆硬币的个
数分别是12,13时,小明应该如何安排策略才能必定获得胜利?
A.安排小亮先取硬币;
B.小明或小亮均一定必胜
C.安排自己先取硬币
D.不可能必胜
解析:很好理解,小明先从13个里面取出一个,剩下12个,以后的取法就是:无论小亮每次取多少个,自己都从另外一堆中
取相同的个数,则可保证自己会取胜,因为两堆都是12个。
3.不考虑任何编译器优化(如:NRVO),下述代码的第10行会发生
#include //1
class B//2
{//3
};//4
B func(const B& rhs){//5
return rhs;//6