A)语法出错B)1,1,1,2C)1,2,3,2D)1,1,2,2
14、下列说法正确的是:
[13]。
A)一个类的对象可以是另一个类的成员
B)一个类可以作为另一个类的派生类
C) 一个类定义在另一个类的说明中
D) 以上说法均正确
15、类MyClass的定义如下:
classMyClass
{
public:
MyClass(){value=0;}
SetValue(inti){value=i;}
private:
intvalue;
};
则对语句:
MyClass*p,my;p=&my;正确的描述是[14]。
A) 语句p=&my;是把对象my赋值给指针变量p;
B) 语句MyClass*p,my;会调用两次类MyClass的构造函数
C) 对语句*p.SetValue(5)的调用是正确的
D) 语句p->SetValue(5)与my.SetValue(5)等价
16、下列各类函数中,不是类的成员函数。
A)构造函数B)析构函数C)友元函数D)拷贝构造函数
17、派生类的对象对它的基类成员中是可以访问的。
A)公有继承的公有成员
B)公有继承的私有成员
C)公有继承的保护成员
D)私有继承的公有成员
18、有关析构函数的说法不正确的是。
A)析构函数有且只有一个
B)析构函数无任何函数类型
C)析构函数和构造函数一样可以有形参
D)析构函数的作用是在对象被撤销时收回先前分配的内存空间
19、通常拷贝构造函数的参数是。
A)某个对象名
B)某个对象的成员名
C)某个对象的引用名
D)某个对象的指针名
20、若类A和类B的定义如下:
classA
{inti,j;
public:
voidget();
}
classB:
A
{intk;
public:
voidmake();
}
voidB:
:
make()
{
k=i*j;
}
则上述定义中,是非法的表达式。
A)voidget();B)intk;C)voidmake();D)k=i*j;
二、填空题(每空1分,共20分)
1、数学式子x2+y2写成C++语言表达式是[1]。
2、如果a=1,b=2,c=3,d=4,则条件表达式a
a:
cc:
d的值为[2]。
3、设有函数定义:
intf1(void){return100,200;},调用f1时,函数返回值为[3]。
4、C++使用cin和cout进行输入输出操作的程序必须包含头文件[4],其语句形式为[5]。
5、用C++表达式描述命题“a与b中有一个小于c”:
[6]。
6、函数调用语句fun(a+b,(x,y),fun(n+k,d,(a,b)))中实参的个数为[7]。
7、定义内联函数所用的关键字[8],定义友元所用的关键字为[9]。
8、执行常量定义语句constintsize=100*sizeof(int);后,符号常量size的值为[10]。
9、设m=1,n=2,则表达式m++==n和++m==n的值分别为[11]和[12]。
10、任何类中允许有[13]、[14]、[15]三种类型的数据,数据和成员函数的默认类型为[16]。
11、C++支持面向对象程序设计的四个要素是:
封装性、继承和派生、[17]和[18]。
12、若Queue是一个类,aQueue是它的一个对象,而且该类中定义了一个静态成员函数show()则在类外对该成员的函数进行调用的方式可以为[19]和[20]。
三、阅读程序,写出程序运行结果(第[3]、[10]空为3分,其余每空1分,共20分)
1、写出下列程序的运行结果
#include
classCSample
{public:
CSample();
voidDisplay();
private:
inti;
staticintk;
};
Csmaple:
:
CSample()
{i=0;
k++;
}
voidCSample:
:
Display()
{cout<<”i=”<
intCSample:
:
k=0;
voidmain()
{CSamplea,b;
a.Display();
b.Display();}
程序的输出结果为[1]
[2]。
2、#include
voidsplitfloat(floatx,int*p1,float*p2)
{
*p1=(int)x;
*p2=x-*p1;
}
voidmain()
{
intn;
floatx,f;
cin>>x;
splitfloat(x,&n,&f);
cout<<”n=”<}
输入3.1415,输出结果为________[3]________
3、#include
intnextStudentID=0;
classStudentID
{public:
StudentID(intid=0)
{value=id;
cout<<“Assigningstudentid:
”<}
~StudentID()
{--nextStudentID;
cout<<“DestructingID:
”<}
protected:
intvalue;
};
classstudent
{public:
student(char*pName=“noname”,intssID=0):
id(ssID)
{cout<<“Constructingstudent:
”<}
protected:
StudentIDid;
};
voidmain()
{students(“Randy”,9818);
studentt(“Jenny”,9819);
}
输出结果为____[4]___________
[5]
[6]
[7]
[8]
[9]。
4、#include
classB
{public:
B(){};
B(inti,intj);
voidprintb();
private:
inta,b;
};
classA
{public:
A(){};
A(inti,intj);
voidprinta();
private:
Bc;
};
A:
:
A(inti,intj):
c(i,j)
{};
voidA:
:
printa()
{c.printb();}
B:
:
B(inti,intj)
{a=i;b=j;
}
voidB:
:
printb()
{cout<<”a=”<}
voidmain()
{
Am(7,8);
m.printa();
}
输出结果为_____[10]__________
5、#include
classB
{public:
B();
B(inti);
~B();
voidPrint();
private:
intb;
};
B:
:
B()
{b=0;
cout<<"B'sdefaultconstructorcalled."<}
B:
:
B(inti)
{b=i;
cout<<"B'sconstructorcalled."<}
B:
:
~B()
{cout<<"B'sdestructorcalled."<voidB:
:
Print()
{cout<
}
classC:
publicB
{public:
C();
C(inti,intj);
~C();
voidPrint();
private:
intc;
};
C:
:
C()
{c=0;
cout<<"C'sdefaultconstructorcalled."<}
C:
:
C(inti,intj):
B(i)
{c=j;
cout<<"C'sconstructorcalled."<}
C:
:
~C()
{cout<<"C'sdestructorcalled."<voidC:
:
Print()
{B:
:
Print();
cout<}
voidmain()
{Cobj(5,6);
obj.Print();
}
输出结果为_____[11]__________
[12]
[13]
[14]
[15]
[16]
四、改错题:
指出下列程序的错误,并说明原因(每错2分,共10分)
1、#include
classA{
public:
voidA(inti=0){m=i;}
voidshow(){cout<void~A(){}
private:
intm;
};
voidmain()
{
Aa(5);
a.m+=10;
a.show();
}
________[1]________________[2]________________[3]________
2、#include
classA
{public:
voidsetA(int);
voidshowA();
private:
inta;
};
classB
{public:
voidsetB(int);
voidshowB();
private:
intb;
};
classC:
publicA,privateB
{public:
voidsetC(int,int,int);
voidshowC();
private:
intc;
};
voidA:
:
setA(intx)
{a=x;}
voidB:
:
setB(intx)
{b=x;}
voidC:
:
setC(intx,inty,intz)
{SetA(x);
SetB(y);
c=z;
}
intmain()
{Cobj;
obj.setA(5);
obj.showA();
obj.setC(6,7,9);
obj.showC();
obj.setB(6);
obj.showB();
return0;
}
________[4]________________[5]________
五、程序填空:
(每空2分,共10分)
1、下面程序的功能是:
从键盘上输入若干个整数按升序排序后输出;
#include“iostream.h”
voidsort(inta[],intn)
{for(inti=0;ifor(intj=i+1;jif([1]){intt=a[i];a[i]=a[j];a[j]=t;}
}
voidInput(int*p,intn)
{cout<<“输入”<”<for(inti=0;i>[2];
}
voidOutput(int*p,intn)
{for(inti=0;i}
voidmain(void)
{intx[200],intnum;
cout<<”输入安排序数的个数:
”;
cin>>num;
Input(x,num);
Sort(x,num);
Output(x,num);
}
2、下列程序的功能是:
从堆中获取一个整数数组,赋值并打印。
#include
#include
voidmain()
{intarraysize;//定义元素个数
int*array;
cout<<“pleaseinputanumberofarray:
”<cin>>arraysize;
if(array=[4])==Null)
{
cout<<“Can’tallocatemorememory!
”<exit
(1);
}
for(intcount=0;countarray[count]=count*2;
for(intcount=0;countcout<cout<[5];
}
六、编写下面问题的C++程序(每题10分,共20分)
1、 建立一个ARRAY类,求一维数组中各元素的最大值、最小值和平均值。
要求如下:
(1) 私有成员:
● intdata[10]:
数组名称
● intmax:
元素的最大值
● intmin:
元素的最小值
● floataverage:
各元素的平均值
(2) 公有成员:
● 构造函数ARRAY(inta[10]):
初始化成员数组
● voidprocess():
求data数组中的最大值、最小值和平均值
● voidprint():
输出数组中元素的最大值、最小值和平均值
(3) 在主程序中进行该类的测试。
2、编写一个学生和教师数据输入和显示程序,学生数据要求有编号、姓名、班号和成绩,教师数据有编号、姓名、职称和部门。
要求将编号、姓名的输入和显示设计成一个类person,并作为学生数据操作类student和教师数据操作类teacher的基类,学生数据中的班号和成绩的输入和显示在student类中实现,教师数据中的职称和部门的输入和显示在teacher类中实现。
最后在主函数中进行该类的测试。
下面给出了基类person的主要成员:
(1) 私有成员:
● intno;编号
● charname[10];姓名
(2) 公有成员:
● voidinput();编号和姓名的输入
● voiddisplay();编号和姓名的显示