清华大学 笔试题

一、单项选择题(第1~15题) 
1. 在某个完整C++工程中总有5个.h文件,3个.cpp文件。当编译这个工程时,将会编译得到多少个.obj文件? 
A. 2  B. 3 C. 5   D. 8 

2. 为防止头文件重复包含,以下书写正确的是 
A. #define FILE_H 
#ifndef FILE_H 
  …// 内容 
#endif 
B. #ifndef FILE_H 
#define FILE_H 
  …// 内容 
#endif 
C. #ifndef FILE_H 
#define FILE_H 
#endif 
  …// 内容 
D. #ifndef FILE_H 
   …// 内容 
   #define FILE_H 
   #endif 

3. 有如下的代码 
class CA { 
public: 
      CA(int i = 0) {} 
      CA(const CA &a) {} 
}; 
int main() { 
   CA a[5] = {CA(5);} // (1) 
      CA aa = a[0]; // (2) 
      aa = a[1];      // (3) 
      a[1] = a[0]; // (4) 
      return 0; 

其中调用了拷贝构造函数的行是 
A. (1)    B. (2)    C. (1)(2)    D.(3)(4) 

4. 有如下程序 
class Base{};  class Mem1{};  class Mem2{}; 
class Mem3{}; class Mem4{}; 
class Dev1 : public Base { 
      Mem2 m2;  Mem1 m1; 
}; 
class Dev2 : public Dev1 { 
      Mem3 m3;  Mem4 m4; 
public: 
      Dev2() : m4(), Dev1(), m3() {} 
}; 
int main() { Dev2 d2; return 0; } 
定义d2时,各类的构造函数被依次调用并退出,退出顺序为 
A. Dev2,Mem3,Mem4,Dev1,Mem2,Mem1,Base 
B. Base,Mem2,Mem1,Dev1,Mem3,Mem4,Dev2 
C. Dev2,Mem4,Mem3,Dev1,Mem2,Mem1,Base 
D. Base,Mem1,Mem2,Dev1,Mem4,Mem3,Dev2 
5. 有如下程序 
#include <iostream> 
using namespace std; 
class Base { 
public: 
      virtual void NameOf()  
{cout << "Base::NameOf" << endl;} 
  void InvokingClass() 
{cout << "Invoked by Base" << endl;} 
}; 
class Derived : public Base { 
public: 
      void NameOf()  
{cout << "Derived::NameOf" << endl;} 
      void InvokingClass()  
{cout << "Invoked by Derived" << endl;} 
}; 
int main() { 
  Derived aDerived; 
      Derived *pDerived = &aDerived; 
  Base   *pBase   = &aDerived; 
      pBase->NameOf(); 
      pBase->InvokingClass(); 
      pDerived->NameOf(); 
      pDerived->InvokingClass(); 
      return 0; 

则程序输出为 
A. Base::NameOf 
Invoked by Base 
Derived::NameOf 
Invoked by Derived 
B. Derived::NameOf 
Invoked by Derived 
Derived::NameOf 
Invoked by Derived 
C. Derived::NameOf 
Invoked by Base 
Derived::NameOf 
Invoked by Derived 
D. Base::NameOf 
Invoked by Derived 
Derived::NameOf 
Invoked by Derived 


6. 多态的概念与下列哪一项相关? 
A. 虚函数 
B. 重载函数 
C. 静态函数 
D. 模板函数 

7. 有如下类的定义 
class MyClass { 
public: 
      MyClass() { cout << 1; } 
}; 
则语句MyClass a, b[2], *p[3];的输出结果是 
A. 11 B. 111  C. 1111   D. 111111 

8. 已知同类型的随机访问迭代器ita和itb,以下运算错误的是 
A.  ita ++;        B.  ++ itb; 
C.  ita – itb;       D.  ita + itb; 

9. 对于类的const成员函数,以下描述正确的是                       
A. const成员函数不修改类的数据成员         
B. const成员函数可修改类的数据成员 
C. const成员函数只能由const对象调用 
D. const成员函数不能访问类的数据成员 

10. 以下程序的运行结果是什么? 
#include <iostream> 
using namespace std; 
class Number { 
  static int x; 
public: 
  Number() {x++; cout << x <<" ";} 
  Number(int a) { x = a; cout << x <<" ";} 
  Number(const Number &a) 
{ x = a.x + 2; cout << x <<" ";} 
}; 
int Number::x = 0; 
int main () { 
  Number n1, n2(n1), n3(2); 
  Number n4[2] = { n1, n3 };
return 0; 

A. 1 2 2 4 6 
B. 1 3 4 6 8 
C. 1 3 2 4 6 
D. 1 2 3 4 5 


11. struct的成员和class的成员,默认的访问控制类型分别为 
A. public和public  
B. public和private 
C. private和public 
D. private和private 

12. 有如下类的定义 
class Date { 
int year, month, day; 
public: 
Date(int y, int m, int d) : year(y), month(m), 
 day(d) {} 
Date() : year(2008), month(9), day(7) {} 
}; 
以下代码错误的是 
A. Date today = Date(2008, 9, 7); 
B. Date today(); 
C. Date today; 
D. Date today(2008, 9, 7); 

13. 对于类的静态数据成员,下列描述错误的是 
A. 被该类所有对象共享,程序退出时才收回分配的空间 
B. 不通过对象也可以调用静态成员函数 
C. 静态成员函数能够访问非静态数据成员 
D. 静态成员函数能调用该类的其他静态成员函数 

14. 下面哪些函数声明是正确的? 
A. void insert(char c, int pos, int len); 
int insert(char c, int pos, int len);  
B. void insert(char c, int pos); 
int insert(char c, int pos, int len = 1); 
C. void insert(char c, int pos); 
void insert(char c, int pos, int len = 1); 
D. void insert(char c, int pos); 
void insert(char c, int pos, int len); 

15. 以下说法正确的是 
A. 运算符++不能被重载 
B. 运算符->不能被重载 
C. 运算符new不能被重载 
D. 以上说法都不对 


二、多项选择题(第16~25题) 
16. 标准C++的main函数形式为 
A. void main()
B. void main(int argc, char* argv[]) 
C. int main() 
D. int main(int argc, char* argv[]) 

17. 以下说法正确的是 
A. C++的所有运算符都能重载 
B. 在类内可以重载多个operator = 函数,以便从不同的对象赋值 
C. 可以用C++在基于过程、基于对象,以及面向对象等不同层次上进行程序设计 
D. private继承方式中,基类的公有接口成员在派生类中变成private 

18. 以下说法正确的是 
A. 如果在类中没有定义任何构造函数,编译器会自动生成一个缺省构造函数 
B. 如果在类中没有定义析构函数,编译器会自动生成一个析构函数 
C. 构造函数不能是虚函数,析构函数也不能是虚函数。 
D. 构造函数与析构函数都可以是虚函数 

19. 有如下类的定义 
class CA { 
friend class CB; 
int n; 
public: 
CA(CB b); 
CA(const CA &a); 
void Assign(CA a); 
}; 
class CB { 
 int n; 
public: 
 CB(CA a); 
}; 
以下代码正确的是 
A. CA::CA(CB b) : n(b.n) {} 
B. CA::CA(const CA &a) : n(a.n) {} 
C. void CA::Assign(CA a) : n(a.n) {} 
D. CB::CB(CA a) : n(a.n) {}


20. 有如下类的定义 
struct SA { 
 int n; 
public: 
 SA() {} 
}; 
class CB { 
 int n; 
public: 
 CB(int i = 0) {} 
}; 
以下代码正确的是 
A. SA a[20]; 
B. SA *pa = new SA(20); 
C. CB b[10] = {CB(3)}; 
D. CB *pb = new CB(10); 

21. 有如下类的定义 
class CA { 
 static const int n = 5; 
 const int cn; 
public: 
 CA(int i); 
 static int GetN(); 
 int GetCN() const; 
}; 
以下代码错误的是 
A. CA::CA(int i) : cn(i) {} 
B. static int CA::GetN() {return CA::n;} 
C. void fun() { int i = CA::n; } 
D. int CA::GetCN() {return cn;} 

22. 有如下类的定义 
class CA { 
public: 
 int n; 
CA(int i = 0) : n(i) {} 
CA(const CA &a) : n(a.n) {} 
 CA& operator = (const CA& a) 
{n = a.i; return *this;} 
 friend CA operator + (const CA &a,  
const CA &b) {return CA(a.n + b.n);} 
}; 
以下为连续的几行代码,会发生自动类型转换的是 
A. CA a = 2; 
B. CA b = a + 3; 
C. CA c = 1 + b; 
D. CA d = 1 + 3;


清华大学也不过如��


23. 有如下模板的定义 
template <class T> class Sample {
public: 
Sample(T i) : n(i) {} 
void operator ++ () { n++; } 
T n; 
}; 
template <class T> void Swap(T &x, T &y) { 
T temp = x; 
x = y; 
y = temp; 

以下代码可编译通过的是 
A. Sample<int> a(1); a++; 
B. Sample<char*> a("123"); ++a; 
C. Sample<double> a(1.2), b; Swap(a.n, b.n); 
D. Sample<long> a(1), b(2); Swap(a, b); 

24. 以下说法正确的是 
A. 在声明模板参数时,关键字typename的意义与class相同 
B. 除了类型参数外,模板的参数也可以是非类型的参数 
C. 可接受一个参数的类的构造函数,相当于定义了一个自动类型转换 
A. 可以用explicit关键字防止构造函数引起不希望的自动类型转换 

25. 已知模板函数定义如下 
template <class T> T Min(T a, T b) 
{ return ( a < b ) ? a : b; } 
以下调用可编译通过的是 
A. int a = 2, b = 4; 
 int c = Min(a, b); 
B. int a = 0; float b = 1.0f; 
 cout << Min(a, b) << endl; 
C. char* a = "abc";  char b = 'c'; 
 cout << Min(a, b) << endl; 
D char* a = "123";  char b = '1'; 
 char* c = Min(a, &b);


像素大战,邀你来当骑士  点击共同进入像素时代 
清华居然是中文卷?不太可能吧 。��


虽然这题真的假的不知道,但是清华确实是个很圡的地方……中文卷很正常…��


收起回复
  • 7楼
  • 2008-07-24 07:46
    • haj94………………………………………………………………………………………………………………………………………………哎,也没错……………………………………………………………………………………………………………………
      2013-6-6 13:14 回复
    • 我也说一句

       

    我觉得清华还是挺猛的, 都有本科生发出Mobicom��


    呃,圡和猛是两个方面,陈某人能证明1+2,他很猛,但是他也很圡…��


    BBB


    我对第2小题的D选项有点困惑 
    大家觉得这么写对吗?

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值