资源描述
学习-----好资料
一、单项选择题 ( 在每小题的四个备选答案中选出一个正确答案,并将其号码填在题干的括号内。每小题 2 分,共 20 分 )
1. 所谓数据封装就是将一组数据和与这组数据有关操作组装在一起,形成一个实体,这实体也就是 ( )
A. 类 B. 对象 C. 函数体 D. 数据块
2. 面向对象的程序设计语言必须具备的关键要素是 ( )
A. 抽象和封装 B. 抽象和多态性
C. 抽象、封装、继承和多态性 D. 抽象、封装和继承性
3. 类的构造函数被自动调用执行的情况是在定义该类的 ( )
A. 成员函数时 B. 数据成员时
C. 对象时 D. 友元函数时
4. 设有函数模板
template<class Q>
Q Sum(Qx,Qy){
return(x)+(y);
}
则下列语句中对该函数模板 错误 的使用是 ( )
A.Sum(10,2); B.Sum(5.0,6.7) ;
C.Sum(15.2f,16.0f); D.Sum( ″ AB ″ , ″ CD ″ );
5. 已知类 A 是类 B 的友元,类 B 是类 C 的友元,则 ( )
A. 类 A 一定是类 C 的友元
B. 类 C 一定是类 A 的友元
C. 类 C 的成员函数可以访问类 B 的对象的任何成员
D. 类 A 的成员函数可以访问类 B 的对象的任何成员
6. 如果表达式 ++i*k 中的“ ++ ”和“ * ”都是重载的友元运算符,则采用运算符函数调用格式,该表达式还可表示为 ( )
A.operator*(i.operator++(),k) B.operator*(operator++(i),k)
C.i.operator++().operator*(k) D.k.operator*(operator++(i))
7. 下列说法中正确的是 ( )
A. 类定义中只能说明函数成员的函数头,不能定义函数体
B. 类中的函数成员可以在类体中定义,也可以在类体之外定义
C. 类中的函数成员在类体之外定义时必须要与类声明在同一文件中
D. 在类体之外定义的函数成员不能操作该类的私有数据成员
8. 若派生类的成员函数不能直接访问基类中继承来的某个成员,则该成员一定是基类中的 ( )
A. 私有成员 B. 公有成员
C. 保护成员 D. 保护成员或私有成员
9. 对基类和派生类的关系描述中, 错误 的是 ( )
A. 派生类是基类的具体化 B. 基类继承了派生类的属性
C. 派生类是基类定义的延续 D. 派生类是基类的特殊化
10. 类 B 是类 A 的公有派生类,类 A 和类 B 中都定义了虚函数 func(),p 是一个指向类 A 对象的指针,则 p->A::func() 将 ( )
A. 调用类 A 中的函数 func()
B. 调用类 B 中的函数 func()
C. 根据 p 所指的对象类型而确定调用类 A 中或类 B 中的函数 func()
D. 既调用类 A 中函数,也调用类 B 中的函数
二、填空题 ( 每小题 2 分,共 20 分 )
11. 假定用户没有给一个名为 AB 的类定义析构函数,则系统自动给出的缺省析构函数定义为 __________ 。
12. 模板定义中标识类型的参数必须用关键字 _________ 修饰。
13. 表达式 count<<hex 还可表示为 _________ 。
14. 通过 C++ 语言中的 _________ 机制,可以从现存类中构建其子类。
15. 要在调用虚函数的时候强制进行静态联编,可以通过在调用中对虚函数加 _________ 实现。
16. 封装要求一个对象应具备明确的功能,并具有 _________ 以便和其它对象相互作用。
17. 在删除一个动态对象时,将自动调用该动态对象所属类的 _________ 函数。
18. 静态成员函数、友元函数、构造函数和析构函数中,不属于成员函数的是 _________ 。
19. 在下面的类定义中,私有成员有 _________ 。
class Location {
int X,Y;
protected:
int zeroX,zerxY;
int SetZero(intzeroX, intzeroY);
private:
int length,height;
public:
void init(int initX,int initY);
int GetX();
int GetY();
};
20. 类的私有成员只能被它的成员函数和 _________ 访问。
三、改错题 ( 每小题 2 分,共 10 分 )
21. 此类定义有一处错误,请指出错误并改正。
class ABC{
int a;
public:
ABC(int aa)a(aa){}
};
22. 下面程序通过调用函数模板实现计算两个正整数的最大公约数,把 main 函数中错误找出并改正过来。
#include<iostream.h>
template<class T>
T gcd(Tx,Ty){
while(x! =y)
if(x>y)x-=y;
else y-=x;
return x;
}
void main()
{
int a;
double d;
cin>>a>>d;
cout<<gcd(a,d)<<endl;
}
23. 指出下面程序中的错误,并说明出错原因。
#include<iostream.h>
class ConstFun{
public:
void ConstFun(){}
const int f5()const{return 5;}
int Obj() {return 45;}
int val;
int f8();
};
int ConstFun::f8(){return val;}
void main()
{
const ConstFun s;
int i=s.f5();
cout<< ″ Value= ″ <<i<endl;
}
24. 指出下面程序中的错误,并说明错误原因。
#include<iostream.h>
class A{
public:void fun(){cout<< ″ a.fun ″ <<endl;}
};
class B{
public:void fun(){cout<< ″ b.fun ″ <<endl;}
void gun(){cout<< ″ b.gun ″ <<endl;}
};
class C:public A,public B{
private:int b;
public:void gun(){cout << ″ c.gun<< ″ endl;}
};
void main(){
c obj;
obj.fun();
obj.gun();
}
25. 指出下面程序段中的错误,并说明出错原因。
class Location {
int X,Y;
protected:
int zeroX,zeroY;
int SetZero(int zeroX,int zeroY){X=zeroX;Y=zeroY;}
private:
int length,height;
public:
float radius;
void init(int initX,int initY){length=initX;height=initY;}
int GetX(){return X;}
int GetY(){return Y;}
};
int main(){
Location retangleA={25,20,3,5,6,7,3};
return 0;
}
四、完成程序题 ( 每小题 4 分,共 20 分 ) 根据题目要求填空,完成程序。
26. 在下面程序段横线处填上适当的内容。
class A{
________
int n;
public:
A(int nn=0):n(nn){
if(n==0)a=0;
else a=new int [ n ] ;
}
________// 定义析构函数,释放动态数组空间
};
27. 在下面程序横线处填上适当内容,使程序执行结果为:
200_ _ 100
程序如下:
#include <iostream.h>
template ________
Tf(Tx,Ty){
if(sizeof(T)==__________)
return x+y;
else
return x*y;
}
void main(){
cout <<f(10,20)<< ″ -- ″ <<f(45.5,54.5)<<endl;
}
28. 下面程序三次调用同一函数 sum ,在横线处填上适当内容,使输出结果为:
S=2
S=5
S=9
程序如下:
#include<iostream.h>
void sum(int i)
{
static int s;
____________;
cout<< ″ S= ″ <<s<<endl;
}
void main (void)
{
int i;
for (i=0;________)
sum(i);
}
29. 请在下面横线处填上适当的内容,使程序的输出为:
7.00000
7
程序如下:
#include<iomanip.h>
viod main(){
double x=7;
cout<<______________<<x;
cout<<endl<<______________<<x;
}
30. 在下面程序横线处填上适当的内容,使该程序输出结果为:
Creating B
end of B
end of A
程序如下:
#include<iostream.h>
class A
{
public:
A(){}
______________{cout<< ″ end of A ″ <<endl;}
};
calss B:public A
{
public:
B(){________}
~ B(){cout<< ″ end of B ″ <<endl;}
};
void main()
{
A*pa=new B;
delete pa
}
五、程序分析题 ( 每小题 5 分,共 30 分 )
给出下面各程序的输出结果。
31. 当从键盘上输入 1.5 10 时,写出下面程序的执行结果。
#include<iostream.h>
void mian()
{
int a,b,c;
char ch;
cin>>a>>ch>>b>>c;// 从键盘上输入 1.5 10
cout<<a<<endl<<ch<<endl<<b<<endl<<c;
}
输出为:
32. 写出下面程序输出结果。
#include<iostream.h>
template<class T>
void f(T a [ 3 ][ 3 ] ,Tb [ 3 ][ 3 ] ,Tc [ 3 ][ 3 ] )
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++){
c [ i ][ j ] =(T)0
for(int k=0;k<3;k++)
c [ i ][ j ] +=a [ i ][ k ] *b [ j ][ k ] ;
}
}
void main()
{
int a [ 3 ][ 3 ] ={{1,2,3},{4,5,6},{7}},b [ 3 ][ 3 ],
c [ 3 ][ 3 ] ={{2},{0,2},{0,0,2}};
f(a,c,b);
for(int i=0;i<3;i++){
for(int j=0,j<3;j++)
cout<<b [ i ][ j ] << ″ ″ ;
cout<<endl;
}
}
输出为:
33. 写出下面程序的输出结果。
#include<iomanip.h>
class FUN{
friend ostream& operator <<(ostream&,FUN);
}fun;
ostream& operator<<(ostream& os,FUN f){
os.setf(ios::left);
return os;
}
void main()
{
cout<<setfill( ′ * ′ )<<setw(10)<<12345<<endl;
cout<<fun<<setw(10)<<54321<<endl;
}
输出为:
34. 写出下面程序的输出结果。
#include<iostream.h>
class Test{
private:
static int val;
int a;
public:
static int func();
static void sfunc(Test &r);
};
int Test::val=20;
int Test::func()
{
val--;
return val;
}
void Test::sfunc(Test &r)
{
r.a=25;
cout<< ″ Result3 ″ =<<r.a;
}
void main()
{
cout<< ″ Resultl= ″ <<Test::func()<<endl;
Test a;
cout<< ″ Result2= ″ <<a.func();
Test::sfunc(a);
}
输出为:
35. 写出下面程序输出结果。
# include<iostream.h>
class A
{
public:
virtual void func(){cout<< ″ func in class A ″ << endl;}
};
class B
{
public:
virtual void func(){cout<< ″ func in class B ″ << endl;}
};
class C:public A, public B
{
public:
void func(){cout<< ″ func in class C ″ <<endl;
};
void main()
{
C c;
A& pa=c;
B& pb=c;
C& pc=c;
pa.func();
pb.func();
pv.func();
}
输出为:
36. 写出下面程序的输出结果。
# include<iostream.h>
class Location{
public:
int X,Y;
void init(int initX,int initY);
int GetX();
int GetY();
};
void Location::init (int initX,int initY)
X=initX;
Y=initY;
}
int Location::GetX()
{
return X;
}
int Location:GetY()
{
return Y;
}
void display(Location& rL)
{
cout<<rL. GetX()<< ″″ <<rL.GetY()<< ′ \n ′ ;
}
void main()
{
Location A [ 5 ] ={{0,0},{1,1},{2,2},{3,3},{4,4}};
Location *rA=A;
A [ 3 ] .init(5,3);
rA->init(7,8);
for (int i=0;i<5;i++)
display(*(rA++));
}
输出为:
全国2002年10月高等教育自学考试面向对象程序设计参考答案
参考答案
一、单项选择题(本大题共lO小题,每小题2分:共20分)
1.B 2.C 3.C 4.D 5.D 6.B 7.B 8.A 9.B 10.A
二、填空题(本大题共10小题,每小题2分,共20分)
11. ~AB(){}
12. class(或typcname)
13.cout,sctf(ios::hex,ios::basefield)
(或cout.setf(ios::hex),或cout<<settosflags(ios::hex),其中ios::"写成ios_base::也可)
14. 继承(或派生) 15,域名限制(或其它含义等价的描述)
16.接口〈或界面.或公有成员〉
17.析构
18. 友元函数
19. X,Y,length,height (说明:每答对两个给1分)
20 友元类(或友元函数,或友元)
三、改错题(本大题共5小题:每小题2分,共lO分)说明:各小题中,指出错误得l分,说明出错原因或改正正确得l分。
21.ABC(int aa)与a(aa){}之间少一个冒号,应改为ABC(tnt lla):a(aa){}
4、宏观营销环境分析22.main函数中的gcd(a,d)改为gcd(a,(int)d) (或把double d;改为int ; 或把gcd(a,d)改为gcd<int>(a,d)或把gcd(a,b)改为gcd(a,int (d))=
“碧芝”最吸引人的是那些小巧的珠子、亮片等,都是平日里不常见的。据店长梁小姐介绍,店内的饰珠有威尼斯印第安的玻璃珠、秘鲁的陶珠、奥地利的施华洛世奇水晶、法国的仿金片、日本的梦幻珠等,五彩缤纷,流光异彩。按照饰珠的质地可分为玻璃、骨质、角质、陶制、水晶、仿金、木制等种类,其造型更是千姿百态:珠型、圆柱型、动物造型、多边形、图腾形象等,美不胜收。全部都是进口的,从几毛钱一个到几十元一个的珠子,做一个成品饰物大约需要几十元,当然,还要决定于你的心意 尽管售价不菲,却仍没挡住喜欢它的人。23.程序中第4行“void ConstFun(){}”错误,因为声明构造函数时不能指定返回类型。
培养动手能力□ 学一门手艺□ 打发时间□ 兴趣爱好□24.第15行 obj.fun();语句错误,因为用C类的对象obj对函数fun()的访问是两义的,应使用成员名限定来消除两义性。
25.location retangleA={25,20,3,5,6,7,3};语句错误,因为数据成员不都是公有成员,不能用初始化列
表初始化。
四、完成程序题(本大题共5小题,每小题4分,共20分)
26,int *a; (2分)
~A(){delete[]a;} (2分)
6、你购买DIY手工艺制品的目的有那些?27.<class I> (2分)
sizeof(double)(或8或其他等价形式)
2、消费者分析28.s+=2+i(或其他等价形式) (2分)
i<3;i++(或其他等形式) (2分)
29.setiosflage (ios::showpoint) (2分)
resetiosflags(ios::showpoint) (2分)
说明:其中ios:: 可写成ios_basc::
我们女生之所以会钟爱饰品,也许是因为它的新颖,可爱,实惠,时尚,简单等。的确,手工艺品价格适中。也许还有更多理由和意义。那么大学生最喜欢哪种手工艺品呢?此次调查统计如下图(1-3)30. virtual ~A() (2分)
cout<<”creating B”<<end; (2分)
附件(二):调查问卷设计五、程序分析题(本大题共6小题i每小题5分,共30分)
3l.1(1分)
.(2 分)
5(1分)
10(1分)
32. 2 4 6
8 lO 12
14 0 0
说明:每答对一行得2分,全部答对得5分。
§8-4情境因素与消费者行为 2004年3月20日33. * * * * * 12345 (2分)
54321 * * * * * (3分)
在上海, 随着轨道交通的发展,地铁商铺应运而生,并且在重要的商业圈已经形成一定的气候,投资经营地铁商铺逐渐成为一大热门。在人民广场地下“的美”购物中心,有一家DIY自制饰品店---“碧芝自制饰品店”。34.Result1=19
Result2=18 Result3=d0
说明:(1)写对第一行结果得2分,只写出“Result1=”,而未写出结果“l9”,得l分。
(2)写对第二行结果得3分,只写出“Rcstilt2=18”或“ Rcsidt3=25”,得2分。
(3)第一衍与第二行全写正确,但写在同一行上扣1分。
35.func in class C
func in class C
fund in class C
说明:每答对一行得2分,全部答对得5分。
36.7 8
1 1
2 2
5 3
4 4
说明:每答对一行得1分。
更多精品文档
展开阅读全文