复试整理理
2010年年
⼀一、简答题(60分)
1、简述你对“⾯面向过程”和“⾯面向对象”编程思想的认识与思考
答:⾯面向过程是将解决问题的重点放在如何实现过程的细节⽅方⾯面,把数据和对数据进⾏行行操作的函数截然分
开,以数据结构为核⼼心,围绕着功能的实现或操作流程来设计程序,安全性较低、扩展升级麻烦,当问题的
规模变⼤大时,编程将很复杂;⾯面向对象将客观事物看作具有属性和⾏行行为的对象,通过抽象找出同⼀一类对象的
共同属性(静态特征)和⾏行行为(动态特征),形成类。通过继承与多态可以很⽅方便便地实现代码重⽤用,⼤大⼤大缩
短了了软件开发周期,并使软件⻛风格统⼀一。
2、ADT是什什么?简述你对“数据抽象”和“信息隐藏”的认识
答:ADT即抽象数据类型,是基于已有类型⽽而组合⽣生成的复合数据类型,类正是抽象数据类型的描述形式。
数据抽象:指以数据为中⼼心,把数据及在数据上的操作作为⼀一个整体来进⾏行行描述;信息隐蔽:通过封装,实
现信息隐蔽;将类对外部的接⼝口放在类的公有部分,数据放在类的私有部分中,防⽌止⽤用户在类外直接访问数
据,并且屏蔽了了类的实现细节,实现信息隐藏。
3、const和static有什什么作⽤用?
答:关键字const⽤用于定义常量量,可以保护被修饰的量量,防⽌止意外的修改,增强程序的健壮性,编译器器⼀一般不不
为普通const常量量分配存储空间,⽽而是将它们保存在符号表中,没了了存储与读内存的操作,效率较⾼高,同时节
省了了空间,避免了了不不必要的内存分配;static⽤用于声明静态成员,它只有⼀一个变量量拷⻉贝,供类的所有对象共
享,静态类变量量表示整个类范围中(所有类对象⽽而⾮非指定的类对象)共享的信息。
4、友元关系的利利与弊
答:友元可以是⼀一个函数也可以是⼀一个类,友元提供了了不不同类的成员函数之间、类的成员函数和⼀一般函数之
间进⾏行行数据共享的机制,通过友元,⼀一个⼀一般函数或另⼀一个类中的成员函数可以访问类中的私有成员和保护
成员。友元的正确使⽤用可以提供程序运⾏行行效率,实现信息共享,但同时也破坏了了类的封装性和隐藏性,导致
程序可维护性变差。
5、C++多态的实现
答:多态是指同样的消息被不不同类型的对象接收时导致完全不不同的⾏行行为,是对类的特定成员函数的再抽象。
C++⽀支持的多态有多种类型,重载(包括函数重载和运算符重载)和虚函数是其主要的⽅方式。
6、STL是什什么?组成部分和核⼼心作⽤用
答:标准模板库(Standard Template Library),有三部分组成:容器器(container)、迭代器器(iterator)和算法
(algorithm)。程序员可以重⽤用STL容器器、迭代器器和算法实现通⽤用的数据表示和操作,节约⼤大量量的开发时间和资
源。
⼆二、程序设计题(90分)
这篇博客中有所有题⽬目的参考代码与解析:
[2010] http://blog.csdn.net/qq_32925781/article/details/79377073
2011年年
⼀一、简答题(50分)
1、简述你对C++中的数据类型和抽象数据类型(ADTs)的理理解
答:数据类型是⼀一组性质相同的具有⼀一定范围的值集以及定义于这个值集上的⼀一组操作。数据类型既有内部
数据类型,如int,char,float,bool等,⼜又有⾃自定义外部数据类型,如枚举类型,结构类型,联合类型,数
组类型、类类型。ADT即抽象数据类型,是基于已有类型⽽而组合⽣生成的复合数据类型,类正是抽象数据类型
的描述形式。
2、请举例例并写出相关代码,阐述C++在什什么情况下必须进⾏行行运算符重载
答:只有当⼆二元运算符最左边的操作数是该类的⼀一个对象,或者当⼀一元运算符的操作数是该类的⼀一个对象
时,才有必要进⾏行行运算符重载。
⽐比如下⾯面这个实例例中必须对运算符+进⾏行行重载:
//运算符重载实例例
#include
using namespace std;
class MyClass{
private:
int x;
double y;
public:
MyClass(int xx = 0,double yy = .0){
x = xx;
y = yy;
}
void print() const {
cout << "x:" << x << " y:" << y << endl;
}
//以成员函数的⽅方式重载+运算符
MyClass & operator +(const MyClass & temp){
x += temp.x;
y += temp.y;
return *this;
}
};
int main(){
MyClass a(1,1.1);
MyClass b(10,2.342);
MyClass c;
c = a + b; //⼆二元运算符+的左边是MyClass类的对象
c.print();
return 0;
}
3、为什什么说“继承是C++⾯面向对象的⼀一个主要特征之⼀一”,请简要说明
答:继承是软件重⽤用的⼀一种形式,程序员创建的新类通过继承这⼀一⽅方式 ,从现有的类中吸收其数据和⾏行行为,
再根据新类的特征,即对象的特征,赋予其新的数据和⾏行行为,并通过新的功能进⼀一步提⾼高,在⾯面向对象的程
序设计中,采⽤用继承⽅方式来组织设计系统的类,可以提⾼高程序的抽象程度,更更接近⼈人的思维⽅方式,使程序结
构更更清晰并降低编码和维护的⼯工作量量。
4、如何声明和使⽤用虚函数,说明它在多态性中的作⽤用和意义
答:声明虚函数时,在基类的函数原型前加关键字virtual,在派⽣生类中重写函数;⽤用名称和圆点成员选择运
算符引⽤用⼀一个特定的对象以调⽤用虚函数,被调⽤用的虚函数是在编译时确定的;也可以通过基类指针调⽤用函
数,让程序在任何给定的时刻基于基类指针所指对象的对象类型,动态确定执⾏行行相应的派⽣生类的函数。虚函
数是多态性的主要实现⽅方式,利利⽤用虚拟函数和多态性,程序员可以处理理普遍性⽽而让执⾏行行环境处理理特殊性,即
使在不不知道⼀一些对象的类型的情况下(只要这些对象属于同⼀一继承层次并且通过⼀一个共同的基类指针访
问),程序员也可以命令各种对象表现出适合这些对象的⾏行行为。
5、请说明函数模板和模板函数的区别与联系
答:函数模板:以具体的类型为实参来⽣生成函数体的模板;模板函数:函数模板实例例化的结果,由函数模板
将涉及的数据类型为参数来⽣生成的模板化函数
函数模版就是数据类型参数化的函数定义,是⼀一个函数族,代表的是⼀一类函数。 当编译系统发现⽤用指定数据
类型调⽤用函数模版时,就创建了了⼀一个模版函数,模版函数是⼀一个实例例化的具体函数。
⼆二、编程题(100分)
这篇博客中有所有题⽬目的参考代码与解析:
[2011] http://blog.csdn.net/qq_32925781/article/details/79389350
2012年年
⼀一、简答题
1、编写语句句说明枚举类型是如何定义和使⽤用的
答:Enum Week{Mon,Tue,Wed,Thu,Fri,Sat,Sun};枚举类是对整数区间的⾃自定义类型,⼀一旦定义
则不不能改变,常常代替整数常量量使⽤用,可以使程序更更清晰、更更持久。在进⼊入函数调⽤用或其他模块时,常量量需
要初始化,⽽而枚举类型是⼀一种类型,⽆无须定义实体,便便可直接使⽤用枚举符。默认对应着整数0,1,2...
当然也可以Enum Week{Mon=1,Tue,Wed,Thu,Fri,Sat,Sun};这样定义,对应的整数就变成1,2,3...
2、程序改错
第⼀一题:
#include
using namespace std;
int main()
{
for(int i=0;i<8;i++)
{
if(i%2==0)
cout<
using namespace std;
int main() {
int c;
if((c=cin.get())!=EOF){
main();
cout << c;
//把上⾯面这句句语句句改成 cout << char(c) ;
//不不然就会输出ASCII码
}
return 0;
}
第三题: