触控科技2014校园招聘笔试题
触控科技笔试题,也参加了面试,跟我讲说11月份会通知我,结果也没消息了。公司不大,老板爱喝茶,办公室里全是专业的喝茶器具。之前收购了一个开源游戏引擎Cocos2d。貌似最近又搞来了小鳄鱼爱洗澡,传闻也快上市了。发展不错,不过前面还有可怕的腾讯。。。
#####1. 实现运行时多态的机制是(B)
- A. 重载函数 // 编译时多态
- B. 虚函数 // 运行时多态
- C. 静态函数
- D. 模板函数
#####2. fun()函数是一个类的常成员函数,它无返回值,下列表示中,正确的是(A)
- A. void fun() const;
- B. const void fun();
- C. void const fun();
- D. void fun(const);
#####3. 下列说明中 const char* ptr,ptr应该是(A)
- A. 指向字符常量的指针
- B. 指向字符的常量指针
- C. 指向字符串常量的指针
char *p="hello";
- D. 指向字符串的常量指针
const char *p="hello";
Bjarne在他的The C++ Programming Language里面给出过一个助记的方法: 把一个声明从右向左读。
char * const cp; ( * 读成 pointer to )
cp is a const pointer to char --->cp是一个指向字符char的固定指针
const char * ptr;
ptr is a pointer to const char; --->ptr是一个指向固定字符char的指针
#####4. 这段代码执行后,哪项描述是正确的(A)
int a = 5, b = 7, c; c = a+++b;
- A. a = 6, b = 7, c = 12
- B. a = 5, b = 8, c = 12
- C. a = 5, b = 8, c = 13
- D. 这段代码不合法
就近原则,先执行a++
。a++
的话,是先赋值后做加法。
#####5. 字符串:”\\0211\”xab”
的长度为(B)
- A. 7
- B. 9
- C. 10
- D. 11
#####6. expr的值为(3)
int a = 8, b = 4;
int expr = a++ % ++b;
#####7. expr的值为(8)
int expr = (1 % 3) + (5 | 3);
#####8. expr的值为(22)
char a[6][8];
int expr = a[2] - &a[4][6];
#####9. 请简述C++中overload(重载)和override(覆盖)的区别?
- Overload(重载):在C++程序中,可以将语义、功能相似的几个函数用同一个名字表示,但参数或返回值不同(包括类型、顺序不同),即函数重载。(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual 关键字可有可无。
- Override(覆盖):是指派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于派生类与基类);(2)函数名字相同;(3)参数相同;(4)基类函数必须有virtual 关键字。
#####10. 请简述C++中的4种类型转换方式?
- static_cast 静态的_cast
- dynamic_cast 动态的_cast
- reinterpret_cast 重新解释的_cast
- const_cast 常量的_cast
#####11. 写出几种在不用第三方参数的情况下,交换两个参数的值的方法。
交换值是比较常用的步骤,也比较简单,这里总结了3个方法:
使用临时变量交换。方法很简单,使用临时变量来保存一个值,该值被保存后就可以对其进行赋值操作了;
// 通过临时变量交换值
void swap_temp(int *a, int *b) { // a = 1, b = 3
int temp = *a; // temp = 1
*a = *b; // a = 3
*b = temp; // b = 1
}
使用异或操作(可参考《位运算符》)。具体原理是:对于任何数,都有A^0=A A^A=0;
// 通过位运算交换值
void swap_bit(int *a, int *b) { // a = 1, b = 3
*a = *a ^ *b; // a = a ^ b
*b = *b ^ *a; // b = b ^ a = b ^ (a ^ b) = a = 1
*a = *a ^ *b; // a = a ^ b = (a ^ b) ^ a = b = 3
}
使用加法和减法也可以实现数字的交换,原理同第二条异或原理基本一致;
void swap_add_substract(int *a, int *b) { // a = 1, b = 3
*a = *a + *b; // a = a + b
*b = *a - *b; // b = a - b = (a + b) - b = a = 1
*a = *a - *b; // a = a - b = (a + b) - a = b = 3
}
虽然使用异或操作和加减法运算并没有去声明临时变量,但实际运行过程中,会在临时寄存器中保存临时变量用于计算,所以都是将一个数值保存在了一个临时的场所,只是位置不同而已。
#####12. 假设我们用16位bit来存储RGB像素数据,存储格式定义为RRRRRGGGGGBBBBBB,接下来,我们为了加入透明色,重新定义格式为AAAARRRRGGGGBBBB,头4个bit用来存储alpha值,请写出实现函数。
short convertRGB2ARGB(short RGB, char alpha) {
short ARGB = 0;
short A = alpha & 15;
short R = (RGB >> 11) & 31;
short G = (RGB >> 6) & 31;
short B = RGB & 63;
ARGB = (A << 12) + (R << 8) + (G << 4) + B;
return ARGB;
}
#####13. 翻译(略)。
原文链接:触控科技2014校园招聘笔试题,转载请注明来源!
–EOF–