当前位置:文档之家› C笔试试卷A卷答案解析

C笔试试卷A卷答案解析

C笔试试卷A卷答案解析
C笔试试卷A卷答案解析

C笔试试卷A卷答案解

集团文件版本号:(M928-T898-M248-WU2669-I2896-

考试中心填写:

湖南大学课程考试试卷

课程名称:高等程序设计;课程编码:试卷编号:;考

A. 不能带有参数

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

C. 只能带有一个参数

D. 可以带多个参数

析:记住,类型转换函数有三个特点:1必须是成员函数2无返回类型3无参数

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

A. 返回值

B. this指针

C. 指针参数

D. 返回类型

析:故静态成员函数不能访问类的一般成员(静态成员除外)5.定义类模板时要使用关键字( D )。

A. const

B. new

C. delete

D. template

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

A. 非类成员

B. 类成员

C. 数据成员

D. 函数成员

析:答案显然,但非类成员可能能访问类成员,如友元函数7.C++语言鼓励程序员在程序设计时将( C )。

A. 数据和操作分别封装

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

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

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

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

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

B. 不同的对象调用

相同名称的函数

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

D. 一个对象调用不

同名称的对象

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

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

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

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

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

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

A. 静态成员函数

B. 非静态成员函数

C. 友元函数

D. 前面都不正确

析:友元函数不输入类成员,故不能那样调用。

11.对虚基类的定义,( B )。

A. 不一定要使用虚函数

B. 必须使用虚函数

C. 必须使用private

D. 必须使用public

12.假定CTest为一个类,并且构造函数的参数无缺省值,则执行CTest objTest语句时将自动调用该类的( A )。

A. 有参构造函数

B. 无参构造函数

C. 拷贝构造函数

D. 赋值重载函数

析:无缺省值既有默认值,例如A(int i=0,double=”hello”).

13.当一个类的某个函数被说明为virtual时,该函数在该类的所

有派生类中( A )。

A. 都是虚函数

B. 只有被重新说明时才是虚函数

C. 只有被重新说明为vittual时才是虚函数

D. 都不是虚函数

析:之后,派生类的该虚函数前的virtual关键字可加可不加

14.调用一个成员函数时,使用动态联编的情况是( B )。

A. 通过对象调用一虚函数

B. 通过指针

或引用调用一虚函数

C. 通过对象调用一静态函数

D. 通过指针或引用

调用一静态函数

析:记住,通过对象调用虚函数不会出现多态(通过指针或者

引用才会有多态性)

在构造函数里面调用虚函数不会出现多态

指定命名域调用不会出现多态

15.在派生类中能够直接访问基类的( D )。

A. 公有成员和私有成员

B. 保护成员和私有

成员

C. 不可访问的和私有的成员

D. 保护成员和公有

成员

二、判断正误题(本大题共10小题,每小题1分,共10分)判断

正误,在题后的括号内,正确的划上“√”错误的划上“×”。

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

(√)

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

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

(×)

析:私有的和保护的不行

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

析:这样将使该函数成为内联函数。

5.使用关键字class定义的类中缺省的访问权限是私有(private)的。(√)

6.构造函数和析构函数都不能重载。

(×)

析:构造函数可以重载

7.可以在类的构造函数中对静态数据成员进行初始化。

(×)

析:类头只是申明而已只是表明分配内存的方式并不分配内存,既然没有分配内存何来赋值。正确方式应是在实现文件中省略static关键字但要表明类型和作用域解析操作符来初始化。例如:在类A中声明了static int x;则要在实现文件中初始化,int A::x=1;

8. cout通常与显示器相连,cin通常与键盘相连。

(√)

9. IO流库重载的插入和析取运算符处理所有的数据类型。

(×)

10. ostrstream是向字符数组的输出流,istrstream是从字符数组的输入流。()

这道题暂时不太清楚对错,有谁知道告诉一下我

三、填空题(本大题共10小题,每小题1分,共10分)不写解答

过程,将正确的答案写在每小题的空格内。错填或不填均无分。

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

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

~CTese() 。

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

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

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

6. 执行语句cout<<"x86\082\n";后,输出结果为 x86 (注意并没有换行)。

7. 用new运算符申请动态对象时,系统将自动调用该对象的构造函数。

8. 定义内联函数的方法是在函数的返回值类型之前增加关键字inline 。

9. 在多重继承时,若欲使公共基类只在派生类中产生一个拷贝,则应在派生类中将该基类用关键字 virtual 。(例如class B:public virtual A;)

10. 在C++的I/O流类库中,预定义了4个流,即cin、cout、cerr 和clog,其中 cerr,clog 不可重定向。

四、程序阅读题(本大题共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;

int m_y;

};

int main(void)

{

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;

}

上面程序的输出结果为:

1

2

3

4

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

int f(char *s)

{ char *p=s;

while(*p) p++;

return p-s;

}

void main(void)

{

cout<

}

上面程序的输出结果为:

6

(其实就是一测字符串长度的程序)3.阅读下面程序,写出输出结果。#include

using namespace std;

class CTest

{

public:

CTest()

{

m_iCount++;

}

~CTest()

{

m_iCount--;

}

static int GetCount()

{

return m_iCount;

}

private:

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 CTest;

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

delete p;

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

return 0;

}

上面程序的输出结果为:

1

2

3

4

3

析:delete p时将自动调用其所指对象的析构函数。对于一般类型编译器有内置的释放内置方法,而对于用户自定义类型则无能为力,必须得调用其析构函数还销毁对象。

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

#include

class Shape

{public:

Shape() { }

virtual int Area()=0;

};

class Circle:public Shape

{ int r;

public:

Circle(int c){ r=c; }

int Area() { return int( 3.1415*r*r); }

};

class Rectangle:public Shape

{ int h,w;

public:

Rectangle(int c, int d) { h=c; w=d; } int Area() { return h*w; }

};

void fun(Shape &s)

{

cout<

}

void main()

{

Circle c(4);

fun(c);

Rectangle r(10,2);

fun(r);

}

上面程序的输出结果为:

50.264

20

析:本题的基类为虚基类。正如前面14道选择题一样,通过引用或指针调用虚函数时将引发多态。

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

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

#include

//1

using namespace std;

//2

class CBase

//3

{

//4

public:

//5

virtual void Show() = 0;

//6

};

//7

class CDerive:public CBase

//8 {

//9 public:

//10 CDerive(int x = 0)

//11 {

//12 m_x=x;

//13 }

//14 void Show()

//15 {

//16 cout << m_x << endl;

//17

}

//18 private:

//19 int m_x;

//20

};

//21

int main(void)

//22 {

//23 CBase obj(10);

//24

obj.Show();

//25

return 0;

//26

}

//27

24行有错,虚基类不能实例化!

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

#include

//1

using namespace std;

//2

class CTest

//3

{

//4

public:

//5

void CTest()

//6

{

//7

cout << "构造函数" << endl;

//8

}

~CTest()

//10

{

//11

cout << "析造函数" << endl;

//12

}

//13

};

//14

int main(void)

//15 {

//16

CTest obj;

//17

return 0;

//18

}

相关主题
文本预览
相关文档 最新文档