第 PAGE12页 共 NUMPAGES12页
第 PAGE11页 共 NUMPAGES12页
成绩上海大学2015~2016学年度秋季学期试卷
成
绩
课程名: 面向对象程序设计 课程号:学分: 5
应试人声明:
我保证遵守《上海大学学生手册》中的《上海大学考场规则》,如有考试违纪、作弊行为,愿意接受《上海大学学生考试违纪、作弊行为界定及处分规定》的纪律处分。
应试人 应试人学号 应试人所在院系
题号
一(20)
二(20)
三(20)
四(40)
得分
得分 ——————————————————
得
分
一、判断题(每小题2分,共20分)
1.类的构造函数的函数名与类名相同,可以重载构造函数。(√)
2.类的析构函数可以被重载。(×)
3.重载运算符函数不能改变运算符的操作数个数、优先级和结合方向。(√)
4.引用在声明时必须对其初始化,以绑定某个已经存在的变量(或对象),在该引用的生命期内,该绑定不能被更改。(√)
5.指针变量在定义时必须对其初始化,以锁定某个已经存在的目标变量(或对象),在该指针变量的生命期内,该指向不能被更改。(×)
6.类的非静态成员函数均有一个隐含的形式参数this指针常量,用于指向调用该函数的对象。函数体中不能改变该指针常量的指向(即锁定调用该函数的对象)。(√)
7.派生类继承了基类的所有数据成员,并且在派生类的成员函数中都能直接访问基类的访问属性为private的成员。(×)
8.构造派生类对象时,先调用基类的构造函数,后执行派生类的构造函数。析构派生类对象时,先调用基类的析构函数,后执行派生类的析构函数。(×)
9.含纯虚函数的类称为抽象类,不能创建抽象类的对象,不能定义抽象类的指针变量,不能声明抽象类的引用。(×)
10.引用返回的函数可以作左值,也避免了函数值返回时创建与返回类型相同的临时无名对象。(√)
得分二、填空题(每空2分,共20分)如下设计了一个字符串类String,请根据运行结果,完成程序
得
分
#include
#include
#include
using namespace ① std ;
class String
{
public:
String(const char *str="")
{
size = strlen(② str );
x = size>0 ? new char[size] : NULL;
if(x==NULL) size = 0;
for(int i=0; i
x[i] = str[i];
}
String(const String &s) : x(③ NULL )
{
*this = s;// 直接利用深赋值运算符函数
}
virtual ~String()
{
if(x!=NULL) delete ④ [] x;
size = 0;
}
String & operator=(const String &s)
{
if(this == ⑤ &s ) return *this;
if(x!=NULL) delete [] x;
size = s.size;
x = new char[size];
if(x==NULL) size = 0;
for(int i=0; i
x[i] = s.x[i];
return ⑥ *this ;
}
⑦ char & operator[](int index){return x[index]; }
friend ostream & operator<
{
for(int i=0; i
out << s.x[i];
return ⑧ out ;
}
⑨ friend istream & operator>>(istream &in, String &s)
{
string str;
in >> str;// 利用C++字符串
s = String(str.c_str());// 利用深赋值运算符
return in;
}
friend ⑩ int Compare(const String &s1, const String