清华大学计算机系C++期末考试试题及参考答案_第1页
清华大学计算机系C++期末考试试题及参考答案_第2页
清华大学计算机系C++期末考试试题及参考答案_第3页
清华大学计算机系C++期末考试试题及参考答案_第4页
清华大学计算机系C++期末考试试题及参考答案_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

清华大学计算机系C++期末考试试题及参考答案考试说明:满分100分,考试时间120分钟,闭卷考试;涵盖C++基础语法、面向对象、继承多态、虚函数、模板、内存管理、STL基础等核心考点。一、单项选择题(共10题,每题2分,共20分)1.以下不属于C++基本内置数据类型的是()A.intB.doubleC.charD.string2.C++中用于动态分配堆内存的关键字是()A.newB.mallocC.allocD.create3.关于C++析构函数,下列说法错误的是()A.析构函数无返回值B.析构函数不能重载C.析构函数可以为虚函数D.析构函数必须有参数4.实现C++动态多态的核心条件不包括()A.存在继承关系B.重写虚函数C.用父类指针/引用调用函数D.函数重载5.下列关于引用的说法正确的是()A.引用可以不初始化B.引用可以更改绑定变量C.引用是变量的别名D.引用会开辟新内存空间6.C++类中,默认的成员访问权限是()A.publicB.privateC.protectedD.static7.下列函数中,不属于类构造函数特性的是()A.与类名同名B.无返回值C.可重载D.必须手动定义8.模板参数关键字template对应的核心作用是()A.定义全局函数B.实现代码复用、泛型编程C.修饰静态成员D.实现多态9.以下运算符中,不支持重载的是()A.::B.+C.<<D.[]10.关于static静态成员,说法正确的是()A.静态成员属于对象B.静态成员变量无需类外初始化C.静态成员函数可直接访问普通成员变量D.静态成员属于整个类二、填空题(共10空,每空2分,共20分)1.C++中,________用于释放new分配的堆内存。2.面向对象三大核心特性:封装、________、________。3.虚函数通过________机制实现动态联编,解决继承中的多态问题。4.拷贝构造函数的参数必须是________,防止无限递归调用。5.子类继承父类时,________继承可以保留父类public、protected成员的原有访问权限。6.const修饰的成员函数,________(能/不能)修改类内普通成员变量。7.函数重载的核心条件:同一作用域、函数名相同、________不同。8.STL中,________容器是动态数组,支持随机访问。三、程序输出分析题(共3题,每题6分,共18分)1.写出以下程序运行结果cpp

#include<iostream>

usingnamespacestd;

classTest{

public:

Test(){cout<<"构造"<<endl;}

~Test(){cout<<"析构"<<endl;}

};

intmain(){

Testt1;

Testt2=t1;

return0;

}2.写出以下程序运行结果cpp

#include<iostream>

usingnamespacestd;

intmain(){

inta=10;

int&b=a;

b=20;

cout<<a<<endl;

return0;

}3.写出以下程序运行结果cpp

#include<iostream>

usingnamespacestd;

classBase{

public:

virtualvoidshow(){cout<<"父类"<<endl;}

};

classDerive:publicBase{

public:

voidshow(){cout<<"子类"<<endl;}

};

intmain(){

Base*p=newDerive();

p->show();

deletep;

return0;

}四、代码补全题(共2小题,每题7分,共14分)1.完善代码,实现立方体类的封装,完成长宽高赋值和体积计算功能。cpp

#include<iostream>

usingnamespacestd;

classCube{

private:

intl,w,h;

public:

//补全构造函数,初始化长宽高

Cube(intx,inty,intz)_______________;

//补全体积计算函数

intgetVolume(){

return_______________;

}

};

intmain(){

Cubec(2,3,4);

cout<<c.getVolume()<<endl;

return0;

}2.完善代码,实现函数模板,支持任意数值类型的两数求和。cpp

#include<iostream>

usingnamespacestd;

//补全模板声明

_______________

Tadd(Ta,Tb){

returna+b;

}

intmain(){

cout<<add(1,2)<<endl;

cout<<add(1.5,2.5)<<endl;

return0;

}五、编程大题(共1题,28分)编写C++程序,实现学生类(Student)和研究生类(Graduate),要求如下:1.学生类包含私有成员:姓名(string)、学号(int)、成绩(double);2.学生类提供构造函数、信息打印虚函数;3.研究生类公有继承学生类,新增私有成员:研究方向(string);4.重写信息打印函数,输出学生完整信息(包含研究方向);5.主函数中创建普通学生和研究生对象,通过父类指针实现多态调用打印函数。参考答案及详细解析一、单项选择题(20分)1.D解析:string是STL字符串库类型,并非C++内置基本数据类型。2.A解析:new是C++专属动态内存分配关键字,malloc是C语言库函数。3.D解析:析构函数无参数、无返回值、不可重载,可定义为虚函数。4.D解析:动态多态的条件:继承关系、虚函数重写、父类指针/引用调用,函数重载是静态多态。5.C解析:引用必须初始化、不可更换绑定、无独立内存,仅是变量别名。6.B解析:C++类默认成员访问权限为private(私有)。7.D解析:类会自动生成默认空构造函数,无需手动定义。8.B解析:模板核心是泛型编程,实现不同数据类型的代码复用。9.A解析:作用域运算符::、成员访问运算符.、三目运算符?:不可重载。10.D解析:静态成员属于整个类,所有对象共享,需类外初始化,静态函数无法直接访问普通成员。二、填空题(20分)1.delete2.继承、多态(顺序可互换)3.虚函数表(vtable)4.常量引用(const类名&)5.public(公有)6.不能7.参数列表(参数个数/类型/顺序)8.vector三、程序输出分析题(18分)1.输出结果:构造析构析构解析:创建t1调用默认构造;t2为拷贝构造(无自定义拷贝构造,调用系统默认拷贝,不触发构造函数);程序结束后t1、t2依次调用析构函数。2.输出结果:20解析:b是a的引用,操作b等价于直接操作原变量a,赋值后a的值被修改。3.输出结果:子类解析:父类函数为虚函数,存在继承和重写,通过父类指针指向子类对象,触发动态多态,调用子类重写的show函数。四、代码补全题(14分)1.答案:构造函数::l(x),w(y),h(z)(初始化列表)体积计算:l*w*h完整补全后核心代码:cpp

Cube(intx,inty,intz):l(x),w(y),h(z){}

intgetVolume(){

returnl*w*h;

}2.答案:template<typenameT>或template<classT>解析:函数模板必须先声明模板参数,支持泛型参数传入。五、编程大题(28分)完整参考代码:cpp

#include<iostream>

#include<string>

usingnamespacestd;

//学生基类

classStudent{

protected:

stringname;

intid;

doublescore;

public:

//构造函数

Student(stringn,inti,doubles):name(n),id(i),score(s){}

//虚打印函数

virtualvoidshowInfo(){

cout<<"学生姓名:"<<name<<endl;

cout<<"学生学号:"<<id<<endl;

cout<<"学生成绩:"<<score<<endl;

}

};

//研究生子类,公有继承

classGraduate:publicStudent{

private:

stringmajor;//研究方向

public:

//子类构造函数,初始化父类成员和自身成员

Graduate(stringn,inti,doubles,stringm):Student(n,i,s),major(m){}

//重写打印函数

voidshowInfo()override{

cout<<"=====研究生信息====="<<endl;

cout<<"学生姓名:"<<name<<endl;

cout<<"学生学号:"<<id<<endl;

cout<<"学生成绩:"<<score<<endl;

cout<<"研究方向:"<<major<<endl;

}

};

intmain(){

//父类指针指向普通学生对象

Student*s=newStudent("张三",2026001,92.5);

s->showInfo();

deletes;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论