笔试题目搜集系列推荐:
(1)笔试题目搜集1
(2)笔试题目收集2
(3)笔试题目搜集3
(4)笔试题目搜集4
(5)笔试题目搜集5
1.下列程序输出结果
typedef union {long i; int k[5]; char c;} DATE;
struct data {
char cat;
DATE cow;
char dog;
};
cout<<sizeof(data)<<endl;
date按照4来对界,所以data结构体中按照最大的类型4来对界。最后结果28
2.运行下图中的C++代码,打印出的结果是什么?
bool Fun1(char* str)
{
printf("%s\n", str);
return false;
}
bool Fun2(char* str)
{
printf("%s\n", str);
return true;
}
int _tmain(int argc, _TCHAR* argv[])
{
bool res1, res2;
res1 = (Fun1("a") && Fun2("b")) || (Fun1("c") || Fun2("d"));
res2 = (Fun1("a") && Fun2("b")) && (Fun1("c") || Fun2("d"));
return res1 || res2;
}
答案:打印出4行,分别是a、c、d、a。
3.编译运行下图中的C++代码,结果是什么?(A)编译错误;(B)编译成功,运行时程序崩溃;(C)编译运行正常,输出10。请选择正确答案并分析原因。(题目出自海涛:http://zhedahht.blog.163.com/blog/static/2541117420111169592105/)
#include <iostream>
class A
{
private:
int value;
public:
A(int n)
{
value = n;
}
A(A other)
{
value = other.value;
}
void Print()
{
std::cout << value << std::endl;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
A a = 10;
A b = a;
b.Print();
return 0;
}
答案
:编译错误。在复制构造函数中传入的参数是
A
的一
个实例。由于是传值,把形参拷贝到实参会调用复制构造函数。因此如果允许复制构造函数传值,那么会形成永无休止的递归并造成栈溢出。因此
C++
的标准不允许复制构造函数传值参数,而必须是传引用或者常量引用。在
Visual Studio
和
GCC
中,都将编译出
错。
4.运行下图中代码,输出的结果是什么?这段代码有什么问题?
#include <iostream>
class A
{
public:
A()
{
std::cout << "A is created." << std::endl;
}
~A()
{
std::cout << "A is deleted." << std::endl;
}
};
class B : public A
{
public:
B()
{
std::cout << "B is created." << std::endl;
}
~B()
{
std::cout << "B is deleted." << std::endl;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
A* pA = new B();
delete pA;