面向对象程序设计C++B卷答案Word文档下载推荐.docx
- 文档编号:16968379
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:10
- 大小:19.36KB
面向对象程序设计C++B卷答案Word文档下载推荐.docx
《面向对象程序设计C++B卷答案Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计C++B卷答案Word文档下载推荐.docx(10页珍藏版)》请在冰豆网上搜索。
4、下列的各类函数中,不是类的成员函数的是(C)。
A)构造函数B)析构函数C)友元函数D)复制构造函数
5、(
B)是不可以作为该类的成员的。
A)自身类对象的指针
B)自身类的对象
C)自身类对象的引用
D)另一个类的对象
6、下列关于类的继承描述中,(A
)是错误的。
派生类可以访问基类的所有数据成员,也能调用基类的所有成员函数
派生类也是基类,但基类不一定具有派生类的全部属性和方法
继承描述类的层次关系,派生类可以具有与基类相同的属性和方法
D)
一个基类可以有多个派生类,一个派生类可以有多个基类
7、下列关于静态数据成员的描述中,正确的是(
A
A)静态数据成员是类的所有对象共享的数据
B)类的每个对象都有自己的静态数据成员
C)类的不同对象有不同的静态数据成员值
D)静态数据成员不能通过类的对象调用
8、已知在一个类体中包含如下函数原型:
Volume
operator-(Volume)const;
,下列关于这个函数的叙述中,错误的是(
B
A)这是运算符-的重载运算符函数
B)这个函数所重载的运算符是一个一元运算符
C)这是一个成员函数
D)这个函数不改变类的任何数据成员的值
9、带有虚基类的多层派生类构造函数的成员初始化列表中都要列出虚基类的构造函数,这样将对虚基类的子对象初始化(
D
)。
与虚基类下面的派生类个数有关
B)多次
C)二次
一次
10、下列关于类模板的描述中,错误的是(D)。
A.类模板的成员函数都是模板函数
B.可以为类模板参数设置默认值
C.类模板描述了一组类
D.类模板中只允许有一个类型参数
二、判断题(每题1分,共10分)
1、在保护继承中,对于垂直访问同于公有继承,而对于水平访问同于私有继承。
√
2、析构函数是一种函数体为空的成员函数。
×
3、重载函数必须有不同的参数列表。
√
4、可以用delete释放不是用new运算符分配的内存。
5、某类中的友元类的所有成员函数可以存取或修改该类中的私有成员。
6、关系运算符可以用来比较两个字符的大小,也可用来比较两个字符串的大小。
7、公有继承可以实现子类型。
8、纯虚函数是在基类中说明的虚函数,它在该基类中没有定义具体的操作内容。
9、引用是某个变量的别名,对引用的操作就是对被引用变量的操作。
10、在公有继承中,基类中的公有成员和私有成员在派生类中都是可见的。
三、填空题(每题2分,共20分)
1、类是对具有共同属性和行为的一类事物的抽象描述,共同属性被描述为类中的
数据成员,共同行为被描述为类中的成员函数。
2、假定A是一个类名,则该类的拷贝构造函数的原型说明语句为:
A(constA&
a)
。
3、在派生类的成员中有私有成员、
保护成员
、公有成员
、不可访问成员
四类成员。
4、从实现的角度划分,C++所支持的两种多态性分别是编译时的多态性和运行时的多态性。
实现运行时多态,要使用
虚
函数。
7、带有
纯虚函数
的类称为抽象类,抽象类的特征是不能声明一个抽象类的
对象
,但可以声明一个抽象类的指针或引用。
5、若需要把一个函数“void
F(
);
”定义为一个类AB的友元函数,则应在类AB的定义中加入一条语句:
friendvoidF(AB&
);
8、有如下类定义:
class
Sample{
public:
Sample();
~Sample();
private:
static
data;
};
将静态数据成员data初始化为0的语句是
intSample:
:
data=0;
6、对双目运算符,被重载为成员函数时,有一个参数,被重载为友元函数时,有两个参数。
9、列出C++中的两种代码复用方式:
继承
和
模板
10、已知
sum(int
n){return
n+n;
}
long
sum(long
是一个函数模板的两个实例,则该函数模板的定义是
(
template
<
typename
T>
T
sum(T
四、程序阅读题(共10分)
1、(4分)写出执行下面程序的输出结果。
213312
#include<
iostream>
using
namespace
std;
classPart{
Part(intx=0):
val(x){cout<
val;
}
~Part(){cout<
intval;
classWhole{
Whole(intx,inty,intz=0):
p2(x),p1(y),val(z){cout<
~Whole(){cout<
}
Partp1,p2;
intval;
intmain(){
Wholeobj(1,2,3);
return0;
2、(3分)写出执行下面程序的输出结果。
const:
val=10val=20
classMyClass{
MyClass(intx):
val(x){}
voidprint()const{cout<
"
val="
val<
'
\t'
;
voidprint(){cout<
intmain(){
constMyClassobj1(10);
MyClassobj2(20);
obj1.print();
obj2.print();
return0;
3、(3分)写出执行下面程序的输出结果。
classBase{
voidfun1(){cout<
Base\n"
virtualvoidfun2(){cout<
classDerived:
publicBase{
voidfun1(){cout<
Derived\n"
voidfun2(){cout<
voidf(Base&
b){b.fun1();
b.fun2();
intmain()
{
Derivedobj;
f(obj);
Base
Derived
四、程序改错题(每处2分,共10分)
有一个源程序文件proj.cpp,其中编号为①、②、③、④、⑤的语句有错误。
请修改这些错误,使程序的输出结果为:
12345678910。
源程序文件proj.cpp清单如下:
#include<
usingnamespacestd;
#include
MyClass{
voidMyClass(int
len)-------------①MyClass(intlen)
{
array
=
new
int[len];
arraySize
len;
for(int
i
0;
arraySize;
i++)
array[i]
i+1;
~MyClass(){
delete
array[];
-------------②delete[]array;
void
Print()
const
for(int
cin
--------------③cout<
array[i]<
'
cout
endl;
int
*array;
main()
{MyClass
obj;
---------------④MyClassobj(10);
MyClass*p=&
obj;
p.Print();
---------------⑤p->
Print();
return
六、程序设计题(共30分)
1、(5分)编写一个对具有n个数组元素(通用类型)的数组进行升序排序的函数模板。
2、(10分)定义一个商品类CGoods,其中包含商品号(long
no)、商品名(char
*p_name)、商品价格(double
price)三个数据成员,以及相应的构造函数、拷贝构造函数、析构函数、打印数据成员的成员函数。
3、(15分)
以CGoods类为基类,派生出服装类CClothes和食品类CFood两个派生类,并在这两个类中分别增加一个表示品牌的指针数据成员(char
*p_brand)和表示用途的成员函数(void
usedFor()——可分别输出一条表示服装和食品用途的信息)。
为了能够采用动态联编的方式调用派生类的usedFor()成员函数,应该在CGoods类及其派生类CClothes和CFood类中作何改动?
写出CClothes类和CFood类的完整定义(包括构造、析构和usedFor()成员函数的实现)。
1.#include<
template<
classT>
voidbubbleSort(Ta[],intn)
{inti,j;
Ttemp;
for(i=1;
i<
n;
i++)
for(j=0;
j<
n-i;
j++)
if(a[j]>
a[j+1]){temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
voidprint(Ta[],intn){
for(inti=0;
i++)cout<
a[i]<
"
cout<
endl;
intmain(){
inta[]={2,3,1,6,43,22};
doubleb[]={2.3,3.2,1.6,-6.0,4.3,2.2};
print(a,6);
bubbleSort(a,6);
print(b,6);
bubbleSort(b,6);
2.#include<
string.h>
classCGoods{
longno;
char*p_name;
doubleprice;
CGoods(longno_val,char*p_val,floatprice_val);
CGoods(constCGoods&
r_good);
~CGoods(){delete[]p_name;
}
voidprint()const;
virtualvoidusedFor()=0;
CGoods:
CGoods(longno_val,char*p_val,floatprice_val){
no=no_val;
p_name=newchar[strlen(p_val)+1];
strcpy(p_name,p_val);
price=price_val;
CGoods(constCGoods&
r_good)
{
no=r_good.no;
p_name=newchar[strlen(r_good.p_name)+1];
strcpy(p_name,r_good.p_name);
price=r_good.price;
voidCGoods:
print()const{
cout<
Coursenumber:
<
no<
Coursename:
p_name<
Courseprice:
price<
3.classCClothes:
publicCGoods{
char*p_brand;
CClothes(longno_val,char*p_val,floatprice_val,char*p_brandby):
CGoods(no_val,p_val,price_val)
{
p_brand=newchar[strlen(p_brandby)+1];
strcpy(p_brand,p_brandby);
}
~CClothes(){deletep_brand;
voidusedFor(){cout<
Usedfordressing"
classCFood:
publicCGoods{
CFood(longno_val,char*p_val,floatprice_val,char*p_brandby):
{p_brand=newchar[strlen(p_brandby)+1];
strcpy(p_brand,p_brandby);
~CFood(){delete[]p_brand;
Usedforeating"
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计 答案