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;
}