文档库 最新最全的文档下载
当前位置:文档库 › 高级语程序设计II考试试题(2008)A_含参考答案

高级语程序设计II考试试题(2008)A_含参考答案

四川大学期末考试试题(闭卷)

(2007-2008学年第2学期)

课程号:课程名称:高级语言程序设计II(A卷)任课教师:

适用专业年级:计算机专业07级学号:姓名:

题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。

1.通常情况下,函数模板中的类型参数个数不能是()。

A. 0

B. 1

C. 3

D. 4

2.类的指针成员的初始化是通过函数完成的,这个函数通常是()。

A. 析构函数

B. 构造函数

C. 其他成员函数

D. 友元函数

3.类型转换函数()。

A. 不能带有参数

B. 最多只能带有2个参数

C. 只能带有一个参数

D. 可以带多个参数

4.静态成员函数没有()。

A. 返回值

B. this指针

C. 指针参数

D. 返回类型

5.定义类模板时要使用关键字()。

A. const

B. new

C. delete

D. template

6.下列不具有访问权限属性的是()。

A. 非类成员

B. 类成员

C. 数据成员

D. 函数成员

7.C++语言鼓励程序员在程序设计时将()。

A. 数据和操作分别封装

B. 不同类型的数据封装在一起

C. 数据和操作封装在一起

D. 不同作用的操作封装在一起

8.所谓多态性是指()。

A. 不同的对象调用不同名称的函数

B. 不同的对象调用相同名称的函数

C. 一个对象调用不同名称的函数

D. 一个对象调用不同名称的对象

9.解决二义性问题的方法有()。

A. 只能使用作用域分辨操作符

B. 使用作用域分辨操作符或赋值兼容规则

C. 使用作用域分辨操作符或虚基类

D. 使用虚基类或赋值兼容规则

10.如果在类CTest的外面函数调用CTest::f();则函数f()是类CTest的()。

A. 静态成员函数

B. 非静态成员函数

C. 友元函数

D. 前面都不正确

参考答案:A

错误的划上“×”。

1.friend属于类的存取权限。()

2.重载函数要求函数有相同的函数名,但具有不同的参数个数或参数类型。()

3.常对象可以调用任意成员函数。()

4.在类声明中不但可以说明成员函数的函数头,也可以定义函数体。()

5.析构函数可以有参数。()

三、填空题(本大题共5小题,每小题2分,共10分)不写解答过程,将正确的答案写在每小题的空格内。错填或不填均无分。

1.编译时多态性是通过()函数实现的。

2.在C++中,如果类的名称是CTest,则此类的析构函数名称为()。

3.使用new建立的动态对象在不用时必须用()删除,以便释放所占用空间。

4.友元函数用关键字()说明。

5.使用C++风格的输入/输出时,在程序中必须包含头文件()。

四、程序分析题(本大题共4小题,每小题5分,共20分)给出下面各程序的输出结果。

1.阅读下面程序,写出输出结果。

#include

using namespace std;

class CPoint

{

public:

CPoint(int x = 0, int y = 0):m_x(x), m_y(y) {}

int GetX() const

{

return m_x;

}

int GetY() const

{

return m_y;

}

void SetX(int x)

{

m_x = x;

}

void SetY(int y)

{

m_y = y;

}

private:

int m_x; // X坐标

int m_y; // X坐标

};

{

CPoint oPoint1;

const CPoint oPoint2(3, 4);

cout << oPoint1.GetX() << endl;

oPoint1.SetX(1);

cout << oPoint1.GetX() << endl;

oPoint1.SetY(2);

cout << oPoint1.GetY() << endl;

cout << oPoint2.GetX() << endl;

cout << oPoint2.GetY() << endl;

return 0;

}

上面程序的输出结果为:

2.阅读下面程序,写出输出结果。

#include

using namespace std;

template

class CArray

{

public:

CArray(int iArray[], int iSize):m_pArray(iArray), m_iSize(iSize){ }

int GetSize()

{

return m_iSize;

}

int &operator[](int i)

{

return m_pArray[i];

}

private:

int m_iSize; // 数组元素个数};

int main(void)

{

int s[]={3, 8, 1, 0, 6};

CArray oArray(s, sizeof(s) / sizeof(int));

for (int i = 0; i < oArray.GetSize(); i++)

{

cout << oArray[i] << " ";

}

cout << endl;

return 0;

}

上面程序的输出结果为:

3.阅读下面程序,写出输出结果。

#include

using namespace std;

class CTest

{

public:

CTest()

{

m_iCount++;

}

~CTest()

{

m_iCount--;

}

static int GetCount()

{

return m_iCount;

}

static int m_iCount;

};

int CTest::m_iCount = 0; // 初始化静态数据成员

int main(void)

{

CTest obj1;

cout << CTest::GetCount() << endl;

CTest obj2;

cout << obj2.GetCount() << endl;

CTest obj3;

cout << obj1.GetCount() << endl;

CTest *p = new CT est;

cout << p->GetCount() << endl;

delete p;

cout << CTest::GetCount() << endl;

return 0;

}

上面程序的输出结果为:

4.阅读下面程序,写出输出结果。

#include

using namespace std;

template

class CTest

{

public:

CTest(Type tA = 0, Type tB = 0):m_tA(tA), m_tB(tB){ }

void Show()

{

cout << m_tA << endl;

cout << m_tB << endl;

void Show() const

{

cout << m_tB << endl;

}

private:

Type m_tA;

const Type m_tB;

};

int main(void)

{

CTest oTest1;

oTest1.Show();

CTest oTest2(1, 8);

oTest2.Show();

const CTest oT est3(6, 8);

oTest3.Show();

return 0;

}

上面程序的输出结果为:

五、程序改错题(本大题共3小题,每小题5分,共15分)指出下面程序中的错误,说明错误原因,并加以改正。

1.下面程序中类的定义中有一处错误,请指出出错的行,说明错误原因,并加以改正。

#include //1

using namespace std; //2

//3 class A //4

{ //5

public: //6 A(int a): m_a=a {} //7

void Show() //8

{ //9

} //11

//12 private: //13 int m_a; //14 }; //15

//16 int main(void) //17 { //18

A obj(8); //19

obj.Show(); //20

//21 return 0; //22 } //23

2.下面程序中类的定义中有一处错误,请指出出错的行,说明错误原因,并加以改正。

#include //1 using namespace std; //2

//3 class CTest //4 { //5 public: //6 CTest(int iA = 0):m_iA(iA) //7

{ //8

} //9

//10 void Show() //11 { //12 cout << m_iA << endl; //13 } //14

//15 private: //16 int m_iA; //17 }; //18

//19 int main(void) //20 { //21 const CTest oT est(12); //22 oTest.Show(); //23 cout << endl; //24

//25 return 0; //26 } //27

3.下面程序中类的定义中有一处错误,请指出出错的行,说明错误原因,并加以改正。

#include //1 using namespace std; //2

//3 class CBase //4 { //5 public: //6 virtual void Show() = 0; //7 }; //8

//9 class CDerive:public CBase //10 { //11 public: //12 CDerive(int x = 0): m_x(x){ } //13

//14 void Show() //15 { //16 cout << m_x << endl; //17 } //18

//19 private: //20 int m_x; //21 }; //22

//23 int main(void) //24 { //25 CBase obj(10); //26 obj.Show(); //27

//28 return 0; //29 } //30

六、编程题(本大题25分)

定义一个抽象类CShape,它有一个纯虚函数GetArea ();派生出四边型类CSquare和圆类CCircle,在派生类中重新定义函数GetArea (),用于求图形的面积。在类CShape中增加静态累加器m_sCount,在类CShape的构造函数中对m_sCount进行累加,在类CShape中增加静态成员函数ShowNum()用于显示对象个数,在派生类中增加拷贝构造函数和重载赋值运算符,编写测试程序进行测试。

四川大学期末考试试题(闭卷)参考答案

(2007-2008学年第2学期)

课程名称:高级语言程序设计II(A卷)

一、单项选择题(本大题共10小题,每小题2分,共20分)在每小题列出的四个备选项中,只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。

1.A 2.B 3.A 4.B 5.D

6.A 7.C 8.B 9.C 10.A

二、判断正误题(本大题共5小题,每小题2分,共10分)判断正误,在题后的括号内,正确的划上“√”错误的划上“×”。

1.×2.√3.×4.√5.×

三、填空题(本大题共5小题,每小题2分,共10分)不写解答过程,将正确的答案写在每小题的空格内。错填或不填均无分。

1.重载2.~CTest 3.Delete 4.Friend 5.iostream或iostream.h

四、程序分析题(本大题共4小题,每小题5分,共20分)给出下面各程序的输出结果。

1.参考答案:

1

2

3

4

2.参考答案:

3 8 1 0 6

3.参考答案:

1

2

3

4

3

4.参考答案:

1

8

8

改正。

1.参考答案:

第7行“m_a=a”有错,初始列表的格式错,应改为“m_a(a)”。

2.参考答案:

第11行,第22行与第23行有错,常对象只能调用常成员函数,可将第22行的“const CTest oTest(12)”改为“CTest oTest(12)”;或将第11行的“void Show()”改为“void Show() const”。

3.参考答案:

第26行“CBase obj(10)”有错,Cbase是抽象类,不能直接生成对象,可改为“CDerive obj(10)”。

相关文档
相关文档 最新文档