2学期 《面向对象方法》B卷.docx

上传人:b****8 文档编号:29546788 上传时间:2023-07-24 格式:DOCX 页数:12 大小:18.04KB
下载 相关 举报
2学期 《面向对象方法》B卷.docx_第1页
第1页 / 共12页
2学期 《面向对象方法》B卷.docx_第2页
第2页 / 共12页
2学期 《面向对象方法》B卷.docx_第3页
第3页 / 共12页
2学期 《面向对象方法》B卷.docx_第4页
第4页 / 共12页
2学期 《面向对象方法》B卷.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

2学期 《面向对象方法》B卷.docx

《2学期 《面向对象方法》B卷.docx》由会员分享,可在线阅读,更多相关《2学期 《面向对象方法》B卷.docx(12页珍藏版)》请在冰豆网上搜索。

2学期 《面向对象方法》B卷.docx

2学期《面向对象方法》B卷

2005-2006-2学期《面向对象方法》B卷

一.单项选择(本题共10小题,每题2分,共20分)

1. C++中,封装体现在()上。

A.指针B.类C.数组D.函数

2.以下属于C++中异常所使用的关键字的是()

A.exeption B.friendC.throwD.const

3.对于结构中定义的成员,其默认访问权限为()

A.public B.protectedC.privateD.static

4.对于构造函数下列描述正确的是()。

A.构造函数只能有一个B.构造函数只能有私有(private)的

C.构造函数可以重载D.构造函数只能有默认的

5.用于类中虚成员函数说明的关键字是()

A.publicB.virtualC.protectedD.private

6.下面是关于一个类的友元的说法,其中正确的是()

A. 友元函数不可以访问该类的私有数据成员

B.  友元的声明必须放在类的外部

C.  友元增强了类的封装性

D. 类与类之间的友元关系不可以被继承

7.对于基类中的私有(private)数据成员,在其派生类中是()数据成员。

A.publicB.不可见C.protectedD.private

8.对于拷贝构造函数的描述中,正确的是()

A.用户没有定义拷贝构造函数时,系统会产生一个默认的

B.对于类AB,当执行ABa;ABb=a;时,需要调用类AB的拷贝构造函数

C.默认拷贝构造函数什么事情都不做

D.拷贝构造函数的参数是指针类型

9.关于纯虚函数和抽象类的描述中,()是错误的。

A.纯虚函数是一种特殊的虚函数,它没有具体实现

B.抽象类中一定具有一个或多个纯虚函数

C.抽象类的派生类中一定不会有纯虚函数

D.抽象类一般作为基类使用,其纯虚函数的实现由其派生类给出

10.关于模板的描述正确的是()

A.函数模板的实例化是模板函数B.模板所使用的关键字是standard

C.函数模板就是一种函数D.类模板是一种类

二.判断题(本题共5小题,每小题2分,共10分)

1.析构函数不能是虚函数()

2.类类型数据成员只能在初始化符表中进行初始化()

3.构造函数和析构函数都可以重载,因为它们都是成员函数()

4.面向对象方法具有三大特性:

封装性、继承性和友元()

5.一元运算符,作为友元函数重载时需要声明操作对象作为形参;作为类成员函数重载时则不需要形参()

三.填空题(本题共5小题,每空1分,共10分)

1.假定类AB中有一个公用属性的静态数据成员bb,在主函数中访问bb的写法为            。

2.在c++中,文件输入/出流的头文件是。

3.类A继承类B,则A称为B的,B称为A的。

4.用户申请的内存(用new申请的空间)是在程序的区;函数中局部变量在程序的区。

5.C++中提供的类的默认成员函数有、、、等。

四.简答题与填空(本题共4小题,每小题5分,共20分)

1.C++中new/delete取代了malloc/free,二者有什么区别。

2.C++类中有哪些成员函数不能是虚函数,一般情况下哪些函数定义为虚函数?

3.简述什么情况下必须定义拷贝构造函数,写出类AB的拷贝构造函数的声明?

4.简述纯虚函数的作用,对于类BC的纯虚成员函数virFun(),写出其声明?

五.程序阅读题(本题共3小题,第一小题6分,后两题各7分,共20分)

2005-2006-2学期《面向对象方法》B卷参考答案

一.单项选择(本题共10小题,每题2分,共20分)

1~5:

BCACB6~10:

DBACA

二.判断题(本题共5小题,每小题2分,共10分)

1~5:

FTFFT

三.填空题(本题共5小题,每空1分,共10分)

1.AB:

:

bb2.fstream.h3.派生类、基类4.堆、栈5.构造函数、析构函数、拷贝构造函数、赋值运算符

四.简答题(本题共4小题,每题5分,共20分)

1.答:

new/delete是C++中的关键字,且当使用它们申请或释放对象的堆内存空间时,会去调用构造函数或析构函数。

而malloc/free是C语言提供的库函数,用malloc申请堆内存的函数的参数是类型的长度,如果是类对象的话,不会也调用类的构造函数,同理free也不会调用析构函数。

2.答:

不能是虚函数的成员函数有:

构造函数、内联函数、静态成员函数等,一般情况下析构函数定义为虚函数。

3.答:

如果对象的数据成员包括指向堆空间的指针,此时必须自定义拷贝构造函数;否则系统自带的默认拷贝构造函数只完成成员之间的位拷贝(浅拷贝),只有定义拷贝构造函数,为创建的对象分配堆空间。

AB(constAB&a);

4.纯虚函数的作用就是为其派生类提供函数接口,在派生类中实现这个接口函数,从而实现多态。

voidvirFun()=0;

五.程序阅读题(本题共3小题,第一小题6分,后两题各7分。

共20分)

1.constructing

constructing

a=1.1b=2.2c=3.3

a=3b=4c=5

destructing

destructing

2.thenumberofwheelsis4

constructingVehiclemazda6

thenumberofwheelsis6

constructingVehicleDongfeng140

theendofmainfunction

destructing

destructing

3.thevalueis2.33

5yuan66fen

thevalueis5.66

五.程序设计题(本题共2小题,每小题10分,共20分)

1.Animal:

:

Animal(char*pname,char*voice)

{

m_pStrName=newchar[strlen(pname)+1];

strcpy(m_pStrName,pname);

strcpy(m_StrVoice,voice);

}

Animal:

:

Animal(constAnimal&a)

{

m_pStrName=newchar[strlen(p.m_pStrName)+1];

strcpy(m_pStrName,p.m_pStrName);

strcpy(m_StrVoice,a.m_StrVoice);

}

Animal:

:

~Animal()

{

delete[]m_pStrName;

}

voidAnimal:

:

shout()

{

cout<

}

2.

classCircle:

Shape

{

public:

doublearea()

{

Return3.14*m_dR*m_dR;

}

protected:

doublem_dR;

};

classRectangle:

Shape

{

public:

doublearea()

{

Returnm_dX*m_dY;

}

protected:

doublem_dX;

doublem_dY;

};

 

1.#include

classMyClass

{

public:

MyClass(doublea,doubleb,doublec)

{

m_A=a;m_B=b;m_C=c;

cout<<“constructiong”<

}

~MyClass()

{

cout<<“destructiong”<

}

voiddisplay()

{

cout<<“a=”<

}

private:

doublem_A,m_B,m_C;

};

voidmain()

{

MyClassm(1.1,2.2,3.3);

MyClassn(3,4,5);

m.display();

n.display();

}

2.#include

#include

classVehicle

{

public:

Vehicle(char*type;intnum):

m_wh(num)

{

strcpy(m_StrType,type);

cout<<“constructingVehicle”<

}

private:

char*m_StrType;

Wheelsm_wh;

};

classWheels

{

public:

Wheels(intnum)

{

m_Num=num;

cout<<“thenumberofwheelsis”<

}

~Wheels()

{

cout<<“destructing”<

}

private:

intm_Num;

};

voidmain()

{

Vehiclev1(“Mazda6”,4);

Vehiclev2(“Dongfeng140”,6);

cout<<“theendofmainfunction”<

}

3.#include

classCurrency

{

public:

Currency(doublevalue)

{

m_dValue=value;

}

virtualdisplay()

{

cout<<“thevalueis”<

}

private:

doublem_dValue;

}

classRMB

{

RMB(doublevalue):

Currency(value)

{

m_nYuan=(int)value;

m_nJiaofen=value–m_nYuan;

}

voiddisplay()

{

cout<

}

};

voidmain()

{

Currencyc(2.33);

c.display();

RMBr(5.66);

r.display();

Currency*pc=&r;

pc->display();

}

六.程序设计题(本题共2小题,每小题10分,共20分)

1.编写类Animal的构造函数、析构函数、拷贝构造函数以及叫声函数shout。

已知类Animal的声明部分为:

classAnimal

{

public:

Animal(char*pname,char*voice);

~Animal();

Animal(constAnimal&a);

voidshout();

private:

char*m_pStrName;

charm_StrVoice[10];

};

主函数及程序输出结果为

voidmain()

{

Animaldog(“Nick”,”wangwang”);

Animalcat(“Galphie”,”miaomiao”);

Animaldogee=dog;

dog.shout();

cat.shout();

dogee.shout();

}

输出结果为:

Nick’svoiceiswangwang

Galphie’svoiceismiaomiao

Nick’svoiceiswangwang

2.下列Shape类是一个表示形状的抽象类,area()为求图形面积的成员函数,calArea()则是一个通用的用以求不同形状的图形面积的函数。

请从Shape类派生圆类(Circle)、矩形类(Rectangle),并给出具体的求面积函数。

classShape

{

public:

virtualdoublearea()=0;

};

doublecalArea(Shape&s)

{

returns.area();

}

voidmain()

{

Circlec(2.0);

cout<<“Theareais”<

Rectangler(3,4);

cout<<“Theareais”<

}

输出结果为:

Theareais12.56

Theareais12

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1