您的位置:首页 > 编程语言 > C语言/C++

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):一个类,最好只做一件事,只有一个引起它的变化。单一职责原则可以看做是低耦合、高内聚在面向对象原则上的引申,将职责定义为引起变化的原因,以提高内聚性来减少引起变化的原因。

开放封闭原则(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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: