C++面试题集(3)

39.解释局部变量、全局变量和静态变量的含义。

40.解释堆和栈的区别。

栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。

堆:一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于

链表.

41.论述含参数的宏与函数的优缺点。

42.以下三条输出语句分别输出什么?[C易]

charstr1[]=“abc”;

charstr2[]=“abc”;

constcharstr3[]=“abc”;

constcharstr4[]=“abc”;

constchar*str5=“abc”;

constchar*str6=“abc”;

cout<<boolalpha<<(str1==str2)<<endl;//输出什么?

cout<<boolalpha<<(str3==str4)<<endl;//输出什么?

cout<<boolalpha<<(str5==str6)<<endl;//输出什么?

43.非C++内建型别A和B,在哪几种情况下B能隐式转化为A?[C++中等]

答:

a.classB:publicA{……}//B公有继承自A,可以是间接继承的

b.classB{operatorA();}//B实现了隐式转化为A的转化

c.classA{A(constB&);}//A实现了non-explicit的参数为B(可以有其他带默认值的参数)构造函数

d.A&operator=(constA&);//赋值操作,虽不是正宗的隐式类型转换,但也可以勉强算一个

44.以下代码中的两个sizeof用法有问题吗?[C易]

voidUpperCase(charstr[])//将str中的小写字母转换成大写字母

{

for(size_ti=0;i<sizeof(str)/sizeof(str[0]);++i)

if(‘a'<=str[i]&&str[i]<='z')

str[i]-=('a'-'A');

}

charstr[]=“aBcDe”;

cout<<“str字符长度为:”<<sizeof(str)/sizeof(str[0])<<endl;

UpperCase(str);

cout<<str<<endl;

45.以下代码有什么问题?[C难]

voidchar2Hex(charc)//将字符以16进制表示

{

charch=c/0×10+‘0′;if(ch>‘9′)ch+=('A'-'9′-1);

charcl=c%0×10+‘0′;if(cl>‘9′)cl+=('A'-'9′-1);

cout<<ch<<cl<<‘‘;

}

charstr[]=“Ilove中国”;

for(size_ti=0;i<strlen(str);++i)

char2Hex(str[i]);

cout<<endl;

46.以下代码有什么问题?[C++易]

structTest

{

Test(int){}

Test(){}

voidfun(){}

};

voidmain(void)

{

Testa(1);

a.fun();

Testb();

b.fun();

}

***Testb();//定义了一个函数

47.以下代码有什么问题?[C++易]

cout<<(true?1:”1″)<<endl;

8.以下代码能够编译通过吗,为什么?[C++易]

unsignedintconstsize1=2;

charstr1[size1];

unsignedinttemp=0;

cin>>temp;

unsignedintconstsize2=temp;

charstr2[size2];

48.以下代码中的输出语句输出0吗,为什么?[C++易]

structCLS

{

intm_i;

CLS(inti):m_i(i){}

CLS()

{

CLS(0);

}

};

CLSobj;

cout<<obj.m_i<<endl;

49.C++中的空类,默认产生哪些类成员函数?[C++易]

答:

classEmpty

{

public:

Empty();//缺省构造函数

Empty(constEmpty&);//拷贝构造函数

~Empty();//析构函数

Empty&operator=(constEmpty&);//赋值运算符

Empty*operator&();//取址运算符

constEmpty*operator&()const;//取址运算符const

};

50.以下两条输出语句分别输出什么?[C++难]

floata=1.0f;

cout<<(int)a<<endl;

cout<<(int&)a<<endl;

cout<<boolalpha<<((int)a==(int&)a)<<endl;//输出什么?

floatb=0.0f;

cout<<(int)b<<endl;

cout<<(int&)b<<endl;

cout<<boolalpha<<((int)b==(int&)b)<<endl;//输出什么?

51.以下反向遍历array数组的方法有什么错误?[STL易]

vectorarray;

array.push_back(1);

array.push_back(2);

array.push_back(3);

for(vector::size_typei=array.size()-1;i>=0;-i)//反向遍历array数组

{

cout<<array[i]<<endl;

}

相关推荐