C++,C,java面试例题
2016-07-09 19:49
246 查看
1、在重载一个运算符为成员函数时,其参数表中没有任何参数,这说明该运算符是 ( )。
A、无操作数的运算符
B、二元运算符
C、前缀一元运算符
D、后缀一元运算符
答案:C
解析:因为++和--有前缀和后缀两种形式,为了区分,要求在后缀形式加一个int参数。Const
Fraction operator ++(int),这里的int不过是个哑元,是用不上的,它只是用来判断++是prefix还是postfix。如果有哑元,则是postfix,否则就是prefix。同时定义前缀式操作符和后缀式操作符存在一个问题:它们的形参数目和类型相同,普通重载不能区别所定义的前缀式操作符还是后缀式操作符。为了解决这一问题,后缀式操作符函数接受一个额外的(即,无用的)int型形参。使用后缀式操作符进,编译器提供
0 作为这个形参的实参。尽管我们的前缀式操作符函数可以使用这个额外的形参,但通常不应该这样做。那个形参不是后缀式操作符的正常工作所需要的,它的唯一目的是使后缀函数与前缀函数区别开来。
2、下面不是面向对象的基本原则的是?
A、单一职责原则(Single-Resposibility Principle)
B、开放封闭原则(Open-Closed principle)
C、抽象类原则(Abstract-Class principle)
D、依赖倒置原则(Dependecy-Inversion Principle)
E、接口隔离原则(Interface-Segregation Principle)
答案:C
单一职责原则(SRP):一个类,最好只做一件事,只有一个引起它的变化。单一职责原则可以看做是低耦合、高内聚在面向对象原则上的引申,将职责定义为引起变化的原因,以提高内聚性来减少引起变化的原因。
3、int Fun(int n)
{
if(n==5)
return 2;
else
return 2*Fun(n+1);
}
A、2
B、4
C、8
D、16
答案:D
解析:该题为递归函数的调用,Fun(2)=2*Fun(3)=2*2*Fun(4)=2*2*2Fun(5)=2*2*2*2=16
4、
class A
{
int _a;
public:
A(int a): _a(a)
{
}
friend int f1(A &);
friend int f2(const A
&);
friend int f3(A);
friend int f4(const A);
};
以下调用哪个是错误的:
A、f1(0)
B、f2(0)
C、f3(0)
D、f4(0)
答案:A
解析:A是错误的,由于A &a=0;0是常量,用了&操作符相当于可以修改常量0对象的值,而常对象的值是不能修改的,所以为了保证安全性,一般会加const
A &a=0;左值和右值都是针对表达式而言的,左值是指表达式结束后依然存在的持久对象,右值是指表达式结束时就不再存在的临时对象。在标准C++语言中,临时量(术语为右值,因其出现在赋值表达式的右边)可以被传给函数,但只能被接受为const &类型。函数形式参数是临时量,是右值。所以只能被接受为const &类型 。故A错。
5、在32位机器上,下列代码中
sizeof(a)的值是()
A、20
B、21
C、22
D、24
E、非以上选项
答案:C
解析:首先,#pragma pack(2)
强制设定为2字节对齐
i 4字节
u 一个为13,一个为4,默认为4字节对齐;
union占对齐后数据的最大字节大小,默认为13+3=4*4=16;但是,该处强制为2字节对齐,实际为13+1=2*7=14字节
color 枚举类型的实例
4字节
4+14+4=22字节
6、
1.#include<iostream>
2.using namespace std;
3.
4.void swap_int(int a , int b)
5.{
6. int temp = a;
7. a = b;
8. b = temp;
9.}
10.
11.void swap_str(char*a , char*b)
12.{
13. char*temp = a;
14. a = b;
15. b = temp;
16.}
17.
18.int main(void)
19.{
20. int a = 10;
21. int b = 5;
22. char*str_a = "hello world";
23. char*str_b = "world hello";
24. swap_int(a , b);.
25. swap_str(str_a , str_b);
26. printf("%d %d %s %s\n",a,b,str_a,str_b);
27.
28. return 0;
29.}
A、10 5 hello world world hello
B、10 5 world hello hello world
C、5 10 hello world world hello
D、5 10 world hello hello world
答案:A
解析:swap_int(a, b)将实参10,5传递给了形参,在被调用函数中交换了10和5,但是调用结束,函数释放变量,实参中并没有交换;
swap_str(str_a, str_b)将实参的地址传递给了形参,其实跟上面的类似,并没有改变实参str_a、str_b的指向,实参没有交换。
7、下列程序输出结果是什么?
A、1 2 3
B、1 3 2
C、3 2 1
D、不确定
答案:D
解析:pthread_join(t,NULL)意思是等待线程t执行结束了再执行下面的代码。但在这之前,3个线程都已提交,它们可能都已经顺序随机地执行了,也可能没有,所以结果也是不可预测的。
8、
class P
{
private:
int ival;
public:
P();
~P();
int GetVal(){
return ival;
};
virtual int SetVal(int val)
{
ival=val;
};
};
在32位编译器下sizof(P)为()
A、4
B、8
C、12
D、16
答案:B
解析:1.类的大小为类的非静态成员数据的类型大小之和,也就是说静态成员数据不作考虑。
2.普通成员函数与sizeof无关。
3.虚函数由于要维护在虚函数表,所以要占据一个指针大小,也就是4字节。
4.类的总大小也遵守类似class字节对齐的,调整规则。
本题中,int ival占4个字节,同时virtualintSetVal(intval)占用4个字节,一共是占用8个字节,选B
A、无操作数的运算符
B、二元运算符
C、前缀一元运算符
D、后缀一元运算符
答案:C
解析:因为++和--有前缀和后缀两种形式,为了区分,要求在后缀形式加一个int参数。Const
Fraction operator ++(int),这里的int不过是个哑元,是用不上的,它只是用来判断++是prefix还是postfix。如果有哑元,则是postfix,否则就是prefix。同时定义前缀式操作符和后缀式操作符存在一个问题:它们的形参数目和类型相同,普通重载不能区别所定义的前缀式操作符还是后缀式操作符。为了解决这一问题,后缀式操作符函数接受一个额外的(即,无用的)int型形参。使用后缀式操作符进,编译器提供
0 作为这个形参的实参。尽管我们的前缀式操作符函数可以使用这个额外的形参,但通常不应该这样做。那个形参不是后缀式操作符的正常工作所需要的,它的唯一目的是使后缀函数与前缀函数区别开来。
2、下面不是面向对象的基本原则的是?
A、单一职责原则(Single-Resposibility Principle)
B、开放封闭原则(Open-Closed principle)
C、抽象类原则(Abstract-Class principle)
D、依赖倒置原则(Dependecy-Inversion Principle)
E、接口隔离原则(Interface-Segregation Principle)
答案:C
解析:
面向对象的五大基本原则
单一职责原则(SRP):一个类,最好只做一件事,只有一个引起它的变化。单一职责原则可以看做是低耦合、高内聚在面向对象原则上的引申,将职责定义为引起变化的原因,以提高内聚性来减少引起变化的原因。
开放封闭原则(OCP) :软件实体应该是可扩展的,而不可修改的。也就是,对扩展开放,对修改封闭的。
里氏替换原则(LSP) :子类必须能够替换其基类。这一思想体现为对继承机制的约束规范,只有子类能够替换基类时,才能保证系统在运行期内识别子类,这是保证继承复用的基础。
依赖倒置原则(DIP):依赖于抽象。具体而言就是高层模块不依赖于底层模块,二者都同依赖于抽象;抽象不依赖于具体,具体依赖于抽象。
接口隔离原则(ISP):使用多个小的专门的接口,而不要使用一个大的总接口
3、int Fun(int n){
if(n==5)
return 2;
else
return 2*Fun(n+1);
}
A、2
B、4
C、8
D、16
答案:D
解析:该题为递归函数的调用,Fun(2)=2*Fun(3)=2*2*Fun(4)=2*2*2Fun(5)=2*2*2*2=16
4、
class A
{
int _a;
public:
A(int a): _a(a)
{
}
friend int f1(A &);
friend int f2(const A
&);
friend int f3(A);
friend int f4(const A);
};
以下调用哪个是错误的:
A、f1(0)
B、f2(0)
C、f3(0)
D、f4(0)
答案:A
解析:A是错误的,由于A &a=0;0是常量,用了&操作符相当于可以修改常量0对象的值,而常对象的值是不能修改的,所以为了保证安全性,一般会加const
A &a=0;左值和右值都是针对表达式而言的,左值是指表达式结束后依然存在的持久对象,右值是指表达式结束时就不再存在的临时对象。在标准C++语言中,临时量(术语为右值,因其出现在赋值表达式的右边)可以被传给函数,但只能被接受为const &类型。函数形式参数是临时量,是右值。所以只能被接受为const &类型 。故A错。
5、在32位机器上,下列代码中
sizeof(a)的值是()
A、20
B、21
C、22
D、24
E、非以上选项
答案:C
解析:首先,#pragma pack(2)
强制设定为2字节对齐
i 4字节
u 一个为13,一个为4,默认为4字节对齐;
union占对齐后数据的最大字节大小,默认为13+3=4*4=16;但是,该处强制为2字节对齐,实际为13+1=2*7=14字节
color 枚举类型的实例
4字节
4+14+4=22字节
6、
1.#include<iostream>
2.using namespace std;
3.
4.void swap_int(int a , int b)
5.{
6. int temp = a;
7. a = b;
8. b = temp;
9.}
10.
11.void swap_str(char*a , char*b)
12.{
13. char*temp = a;
14. a = b;
15. b = temp;
16.}
17.
18.int main(void)
19.{
20. int a = 10;
21. int b = 5;
22. char*str_a = "hello world";
23. char*str_b = "world hello";
24. swap_int(a , b);.
25. swap_str(str_a , str_b);
26. printf("%d %d %s %s\n",a,b,str_a,str_b);
27.
28. return 0;
29.}
A、10 5 hello world world hello
B、10 5 world hello hello world
C、5 10 hello world world hello
D、5 10 world hello hello world
答案:A
解析:swap_int(a, b)将实参10,5传递给了形参,在被调用函数中交换了10和5,但是调用结束,函数释放变量,实参中并没有交换;
swap_str(str_a, str_b)将实参的地址传递给了形参,其实跟上面的类似,并没有改变实参str_a、str_b的指向,实参没有交换。
7、下列程序输出结果是什么?
A、1 2 3
B、1 3 2
C、3 2 1
D、不确定
答案:D
解析:pthread_join(t,NULL)意思是等待线程t执行结束了再执行下面的代码。但在这之前,3个线程都已提交,它们可能都已经顺序随机地执行了,也可能没有,所以结果也是不可预测的。
8、
class P
{
private:
int ival;
public:
P();
~P();
int GetVal(){
return ival;
};
virtual int SetVal(int val)
{
ival=val;
};
};
在32位编译器下sizof(P)为()
A、4
B、8
C、12
D、16
答案:B
解析:1.类的大小为类的非静态成员数据的类型大小之和,也就是说静态成员数据不作考虑。
2.普通成员函数与sizeof无关。
3.虚函数由于要维护在虚函数表,所以要占据一个指针大小,也就是4字节。
4.类的总大小也遵守类似class字节对齐的,调整规则。
本题中,int ival占4个字节,同时virtualintSetVal(intval)占用4个字节,一共是占用8个字节,选B
相关文章推荐
- java多态及其与c++的差异
- 关于c++primer不能用字符串字面值构建vector对象
- C语言学习-顺序结构+运算符选讲
- 求两个数的最大公约数
- C++类型转换总结
- C语言中的static
- C++复习要点总结之——友元
- ubuntu12.04 gcc和g++支持 c++11特性
- C++程序员学Python:C与Python进行交互
- 第五十七篇:VS2015建立一个完整的c++工程:头文件.h 源文件.cpp,自动生成类
- C语言strchr()函数:查找某字符在字符串中首次出现的位置
- java重载/重写(覆盖)/重构比较及其与C++差异
- C语言中的进制转换 itoa & sprintf
- C++类构造函数初始化列表
- C++中的explicit
- CrackingtheCodeInterview之C与C++
- c语言中字符指针与字符数组的区别
- c++ stl 学习
- 全排列 和 C++ string类 NYOJ 19
- POJ - 2230 Watchcow