logo资料库

2012年9月23日搜狗校园招聘会笔试试题.doc

第1页 / 共17页
第2页 / 共17页
第3页 / 共17页
第4页 / 共17页
第5页 / 共17页
第6页 / 共17页
第7页 / 共17页
第8页 / 共17页
资料共17页,剩余部分请下载后查看
2012年9月23日搜狗校园招聘会笔试试题
2012 年 9 月 23 日搜狗校园招聘会笔试试题 1、以下程序的输出是(12) [cpp] view plaincopyprint? 1. class Base 2. { 3. public: 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Base(int j) : i(j) virtual ~Base() { } { } void func1() { } i *= 10; func2(); int getValue() { } return i; 15. protected: 16. 17. 18. 19. virtual void func2() { } i++; 20. protected: int i; 21. 22. }; 23. 24. class Child : public Base 25. { 26. public: 27. 28. 29. 30. Child(int j) : Base(j) { } void func1() { i *= 100;
func2(); 31. 32. } 33. protected: void func2() { } i += 2; 34. 35. 36. 37. 38. }; 39. 40. int main(void) 41. { 42. 43. 44. 45. 46. 47. 48. } Base *pb = new Child(1); pb->func1(); cout<getValue()<
[cpp] view plaincopyprint? 1. int main(void) 2. { 3. 4. 5. 6. 7. } http://www.sogou.com cout<<"welcome to sogou"<
C、16000 2 3 2 D、4 1101 13002 60 p1 为指向一维数组的指针,所以 a + 1 指向{50,60,70,80}这一维的地址。减一则为 4 的 地址;同理第二个输出 1101。同理,由于数组的列是 4,所以*(p2 - 1) + 16 就相当于*(p2) + 12,所以第三个输出 13002。 第四个由于 p1 是指针,所以 sizeof(p1)为 8(68 位的系统),所以第四个输出 60。 6、在 32 位操作系统 gcc 编译器环境下,下面的程序的运行结果是(A) [cpp] view plaincopyprint? 1. class A 2. { 3. public: 4. 5. 6. 7. 8. 9. 10. }; 11. int b; char c; virtual void print() { } cout<<"this is father's function!"<
A、12 12 B、8 C、9 8 9 D、12 16 7、以下哪些做法是不正确或者应该极力避免的:【多选】(ACD) A、构造函数声明为虚函数 B、派生关系中的基类析构函数声明为虚函数 C、构造函数调用虚函数 D、析构函数调用虚函数 8、关于 C++标准模板库,下列说法错误的有哪些:【多选】(AD) A、std::auto_ptr类型的对象,可以放到 std::vector> 容器中 B、std::shared_ptr类型的对象,可以放到 std::vector>容器中 C、对于复杂类型 T 的对象 tObj,++tObj 和 tObj++的执行效率相比,前者更高 D、采用 new 操作符创建对象时,如果没有足够内存空间而导致创建失败,则 new 操作符会 返回 NULL A 中 auto 是给别人东西而自己没有了。所以不符合 vector 的要求。而 B 可以。C 不解释。 new 在失败后抛出标准异常 std::bad_alloc 而不是返回 NULL。 9、有如下几个类和函数定义,选项中描述正确的是:【多选】(B) [cpp] view plaincopyprint? 1. class A 2. { 3. public: 4. 5. }; 6. 7. class B 8. { 9. public: 10. 11. }; 12. virtual void foo() { } virtual void foo() { } 13. class C : public A , public B
14. { 15. public: 16. 17. }; 18. virtual void foo() { } 19. void bar1(A *pa) 20. { 21. 22. } 23. B *pc = dynamic_cast(pa); 24. void bar2(A *pa) 25. { 26. 27. } 28. B *pc = static_cast(pa); 29. void bar3() 30. { 31. 32. 33. 34. } C A B c; *pa *pb = = &c; static_cast(static_cast(pa)); A、bar1 无法通过编译 B、bar2 无法通过编译 C、bar3 无法通过编译 D、bar1 可以正常运行,但是采用了错误的 cast 方法 选 B。dynamic_cast 是在运行时遍历继承树,所以,在编译时不会报错。但是因为 A 和 B 没啥关系,所以运行时报错(所以 A 和 D 都是错误的)。static_cast:编译器隐式执行的任 何类型转换都可由它显示完成。其中对于:(1)基本类型。如可以将 int 转换为 double(编 译器会执行隐式转换),但是不能将 int*用它转换到 double*(没有此隐式转换)。(2)对 于用户自定义类型,如果两个类无关,则会出错(所以 B 正确),如果存在继承关系,则可 以在基类和派生类之间进行任何转型,在编译期间不会出错。所以 bar3 可以通过编译(C 选项是错误的)。 10、在 Intel CPU 上,以下多线程对 int 型变量 x 的操作,哪几个不是原子操作,假定变量 的地址都是对齐的。【多选】(ABC)
A、x = y B、x++ C、++x D、x = 1 看下在 VC++6.0 下的汇编命令即可:从图可以看出本题只有 D 选项才是原子操作。 11、一般情况下,下面哪些操作会执行失败?【多选】(BCD) [cpp] view plaincopyprint? 1. class A 2. { 3. public: 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. string a; void f1() { } printf("Hello World"); void f2() { } a = "Hello World"; printf("%s",a.c_str()); virtual void f3() { } printf("Hello World"); virtual void f4() { } a = "Hello World"; printf("%s",a.c_str());
23. }; A、A *aptr = NULL; aptr->f1(); B、A *aptr = NULL; aptr->f2(); C、A *aptr = NULL; aptr->f3(); D、A *aptr = NULL; aptr->f4(); 至于 A 为什么正确,因为 A 没有使用任何成员变量,而成员函数是不属于对象的,所以 A 正确。其实,A* aptr = NULL;aptr->f5();也是正确的,因为静态成员也是不属于任何对象 的。至于 BCD,在 B 中使用了成员变量,而成员变量只能存在于对象,C 有虚表指针,所以 也只存在于对象中。D 就更是一样了。但是,如果在 Class A 中没有写 public,那么就全都 是 private,以至于所有的选项都将会失败。 12、C++下,下面哪些 template 实例化使用,会引起编译错误?【多选】(CEF) [cpp] view plaincopyprint? 1. template class stack; 2. void fi(stack); //A 3. class Ex 4. { 5. 6. 7. }; 8. stack &rs; //B stack si; //C 9. int main(void) 10. { 11. 12. 13. 14. 15. 16. } stack *sc; //D fi(*sc); //E int i = sizeof(stack); //F return 0; 选 C E F; 请注意 stack 和 fi 都只是声明不是定义。我还以为在此处申明后,会在其他 地方定义呢,坑爹啊。 由于 stack 只是声明,所以 C 是错误的,stack 不能定义对象。E 也是一样,stack 只是申 明,所以不能执行拷贝构造函数,至于 F,由于 stack 只是声明,不知道 stack 的大小,所
分享到:
收藏