搜狗2012.9.23校园招聘会笔试题


C/C++类

1、以下程序的输出是(12

  1. class Base 
  2. public
  3.     Base(int j) : i(j) {  }   
  4.     virtual ~Base() {  } 
  5.     void func1() 
  6.     { 
  7.         i *= 10; 
  8.         func2(); 
  9.     } 
  10.     int getValue() 
  11.     { 
  12.         return i; 
  13.     } 
  14. protected
  15.     virtual void func2() 
  16.     { 
  17.         i++; 
  18.     } 
  19. protected
  20.     int i; 
  21. }; 
  22.  
  23. class Child : public Base 
  24. public
  25.     Child(int j) : Base(j) {  } 
  26.     void func1() 
  27.     { 
  28.         i *= 100; 
  29.         func2(); 
  30.     } 
  31. protected
  32.     void func2() 
  33.     { 
  34.         i += 2; 
  35.     } 
  36. }; 
  37.  
  38. int main(void
  39.     Base *pb = new Child(1); 
  40.     pb->func1(); 
  41.     cout<<pb->getValue()<<endl; 
  42.     delete pb; 
  43.      
  44.     return 0; 

2、请问程序的输出结果是(30)
#define DOUBLE(x) x+x // x*2
int i = DOUBLE(5)*5;
cout<<i<<endl;
3、写出一下程序的输出(死循环

  1. int main(void
  2.     char num; 
  3.     for(num = 0; num < 255; ) 
  4.         num += num; 
  5.     printf("%d\n",num); 
  6.     return 0; 

4、程序出错在什么阶段?()

  1. int main(void
  2.     http://www.sogou.com  
  3.     cout<<"welcome to sogou"<<endl; 
  4.      
  5.     return 0; 

A、编译阶段出错    B、运行阶段出错    C、编译和运行都出错    D、程序运行正常
因为http://www.sogou.com中//后面是注释,前面的http:是标签(类似于goto语句中的标签)。(这个题目碉堡了)

5、下面程序执行结果为【说明:X86_64环境】(D)

  1. int main(void
  2.     int a[4][4] = { 
  3.                   {1,2,3,4}, 
  4.                   {50,60,70,80}, 
  5.                   {900,1000,1100,1200}, 
  6.                   {13000,14000,15000,16000} }; 
  7.     int (*p1)[4] = a; 
  8.     int (*p2)[4] = &a[0]; 
  9.     int *p3 = &a[0][0]; 
  10.     printf("%d %d %d %d\n",*(*(a+1)-1),*(*(p1+3)-2)+1,*(*(p2-1)+16)+2,*(p3+sizeof(p1)-3)); 
  11.      
  12.     return 0; 

A、16000 1101  13002 2
B、4  2  3  60
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)

  1. class A 
  2. public
  3.     int b; 
  4.     char c; 
  5.     virtual void print() 
  6.     { 
  7.         cout<<"this is father's function!"<<endl; 
  8.     } 
  9. }; 
  10.  
  11. class B : A 
  12. public
  13.     virtual void print() 
  14.     { 
  15.         cout<<"this is children's function!"<<endl; 
  16.     } 
  17. }; 
  18. int main(void
  19.     cout<<sizeof(A)<<"  "<<sizeof(A)<<endl; 
  20.      
  21.     return 0; 

A、12  12
B、8  8
C、9  9
D、12  16
7、以下哪些做法是不正确或者应该极力避免的:【多选】(ACD)
A、构造函数声明为虚函数
B、派生关系中的基类析构函数声明为虚函数
C、构造函数调用虚函数
D、析构函数调用虚函数

  • 1
  • 2
  • 3
  • 4
  • 5
  • 下一页

相关内容