近期笔试题回顾

 1 const 与 const函数重载

  #include <iostream> using namespace std; class a { public: virtual int foo(int *const index) { cout<<"2/n"; return 0; } virtual int foo(int *index)const { cout<<"1/n"; return 0; } protected: int value; }; class b:public a { public: int foo(int *const index) { cout<<"22/n"; return 0; } int foo(int *index)const { cout<<"11/n"; return 0; } }; int main() { b ta; a* p=&ta; int index=3; p->foo(&index); const int index1=4; p->foo(const_cast<int*>(&index1)); }

输出结果为22 22。

const函数只能被const对象调用。

 

2 strcpy函数调用

 

3 sizeof()的秘密

#include <stdio.h> #include <stdlib.h> #define ENUM(a) (sizeof(a) /sizeof( a[0] )) int main() { char array[] = {'e', 'm','c'}; int d; printf("ENUM=%d/n",ENUM(array)); printf("%d/n",-1<ENUM(array)); for(d=-1;d<=(ENUM(array))-2; d++) { printf("%d",array[d+1]); } system("pause"); return 0 ; }

结果输入ENMU=3,而并不会输出数组,就是说for的条件并不成立,没有循环。

原因在于sizeof返回无符整数,在比较-1<(unsigned)3时,-1被转换为无符号数,结果变成一个很大的整数,导致循环条件为假。

因此这道题与其说是sizeof()的问题不如说是unsigned的类型转换问题。

 

void testsizeof(void) { int x=1, y=0; y = sizeof(x++); printf("x= %d, y = %d/n",x,y); }

结果输出为1 4,为什么呢?因为sizeof()内并不求值,只用式子的类型代入。

 

int main() { printf("%s,",h(f(1,2))); printf("%s/n",g(f(1,2))); return 0; }

结果输出:12,f(1,2)

 

你可能感兴趣的:(c,System,Class,iostream)