资源描述
知识模块五 面向对程序设计基础
一、 选择题
1. ( )不是构造函数的特性。
A、构造函数的函数名与类名相同;B、构造函数可以重载;
C、构造函数可以设立缺省参数;D、构造函数必须指定类型说明。
2. ( )是析构函数的特性。
A、析构函数可以有一个或多个参数;B、析构函数名与类名不同;
C、析构函数的定义只能在类体内;D、一个类中只能定义一个析构函数;
3.要运营一个C语言编写的应用程序如下:
main() {
printf("hello world");
}
在VC6的开发环境中,应当建立哪种类型的工程?
A, Win32 Application
B, Win32 Console Application
C, MFC AppWizard (exe)
D, Utility Project
4. 关于VC6建立的工程的说法,对的的是:
A,工程只能包含.cpp和.h类型的文献
B,工作区文献的后缀是.dsp
C, 用鼠标双击工作区文献可以打开整个工程
D,在VC的FileView中可以看到工程中所有的文献,涉及工作区文献,项目文献等
5. 在VC6中提供了成员方法的自动列表和方法参数的自动提醒功能,但有时不能正常显示,这是应当删除
该工程目录下那种后缀类型的文献后,再次打开工程,就可以正常提醒了。
A, clw
B, ncb
C, opt
D, aps
6. 有关句柄(handle)的说法,下列不对的的是:
A 句柄是一个4字节长的整数值
B 句柄用来标记应用程序中不同的对象或同类对象中的不同实例
C 消息是句柄的一种
D 画笔的句柄类型是HPEN,画刷的句柄类型是HBRUSH
7. C++对C语言作了很多改善,下列描述中( )使得C语言发生了质变,从面向过程变成了面向对象。
A、增长了一些新的运算符;
B、允许函数重载,并允许设立缺省参数;
C、规定函数说明必须用原型;
D、引进了类和对象的概念;
8. 下列描述中,( )是错误的。
A、内联函数重要解决程序的运营效率问题;
B、内联函数的定义必须出现在内联函数第一次被调用之前;
C、内联函数中可以涉及各种语句;
D、对内联函数不可以进行异常接口声明;
9. 在C++中,关于下列设立缺省参数值的描述中,( )是对的的。
A、不允许设立缺省参数值;
B、在指定了缺省值的参数右边,不能出现没有指定缺省值的参数;
C、只能在函数的定义性声明中指定参数的缺省值;
D、设立缺省参数值时,必须所有都设立;
10.( )不是构造函数的特性。
A、构造函数的函数名与类名相同;
B、构造函数可以重载;
C、构造函数可以设立缺省参数;
D、构造函数必须指定类型说明。
11. 是析构函数的特性。
A、析构函数可以有一个或多个参数;
B、析构函数名与类名不同;
C、析构函数的定义只能在类体内;
D、一个类中只能定义一个析构函数
12. C++对C语言作了很多改善,下列描述中( )使得C语言发生了质变,从面向过程变成了面向对象。
A、增长了一些新的运算符;B、允许函数重载,并允许设立缺省参数;
C、规定函数说明必须用原型;D、引进了类和对象的概念;
13. 下列描述中,( )是错误的。
A、内联函数重要解决程序的运营效率问题;B、内联函数的定义必须出现在内联函数第一次被调用之前;
C、内联函数中可以涉及各种语句;D、对内联函数不可以进行异常接口声明;
14. 在C++中,关于下列设立缺省参数值的描述中,( )是对的的。
A、不允许设立缺省参数值;B、在指定了缺省值的参数右边,不能出现没有指定缺省值的参数;
C、只能在函数的定义性声明中指定参数的缺省值;D、设立缺省参数值时,必须所有都设立;
15. 在进行完任何C++流的操作后,都可以用C++流的有关成员函数检测流的状态;其中只能用于检测输入流 状态的操作函数名称是( )。
A fail B eof
C bad D good
16. C++语言是从初期的C语言逐渐发展演变而来的。与C语言相比,它在求解问题方法上进行的最大改善是( )。
A 面向过程 B 面向对象
C 安全性 D 复用性
17. C++对C语言作了很多改善,即从面向过程变成为面向对象的重要因素是_____
A.增长了一些新的运算符 B.允许函数重载,并允许设立缺省参数
C.规定函数说明符必须用原型 D.引进了类和对象的概念
18. C++源程序文献的缺省扩展名是_____
A. cpp B. exe C. obj D. lik
19. 在int a=3,int *p=&a;中,*p的值是_____
20. 类的析构函数是在_____调用的。
A.类创建时 B.创建对象时
C.删除对象时 D.不自动调用
21. 假定AB为一个类,则执行AB x;语句时将自动调用该类的_____
A.有参构造函数 B.无参构造函数
C.拷贝构造函数 D.赋值构造函数
22. 假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为:
A. AB operator+(AB & a , AB & b) B. AB operator+(AB & a)
C. operator+(AB a) D. AB & operator+( )
23. 假定AB为一个类,则执行AB x;语句时将自动调用该类的_____
A.有参构造函数 B.无参构造函数
C.拷贝构造函数 D.赋值构造函数
)
25. 假定AB为一个类, 则该类的拷贝构造函数的声明语句为_________.
A. AB&(AB x); B. AB(AB x) C. AB(AB&); D. AB(AB * x)
26. 下列哪项不是面向对象程序设计的重要特性?
A.封装 B.继承 C.多态 D结构
27. 对象之间的互相作用和通信是通过消息。下列哪项不是消息的组成部分?
A接受消息的对象 B要执行的函数的名字
C.要执行的函数的内部结构 D函数需要的参数
28. 关于C++与C语言关系的描述中,( )是错误的。
A.C语言是C++语言的一个子集 B.C语言与C++语言是兼容的
C.C++语言对C语言进行了一些改善 D.C++语言和C语言都是面向对象的
29. 已知:类A中一个成员函数说明如下:void Set(A&a); 其中,A&的含义是( )。
A.指向类A的指针为a
B将a的地址值赋给变量Set
C.a是类A对象的引用,用来作函数Set()的参数
D.变量A与a按位与作为函数Set( )的参数
30. 已知:print( )函数是一个类的常成员函数,它无返回值,下列表达中,( )是对的的。
A.void print( ) const; B.const void print( );
C void const print( ); D.void print(const);
31. 假如类A被说明成类B的友元,则_____
A.类A的成员即类B的成员 B.类B的成员即类A的成员
C.类A的成员函数不得访问类B的成员 D.类B不一定是类A的友元
32. 假定AB为一个类,则执行AB x;语句时将自动调用该类的_____
A.有参构造函数 B.无参构造函数
C.拷贝构造函数 D.赋值构造函
33. 下面的函数声明中, _______是” void BC(int a, int b);”的重载函数?
A. int BC(int a, int b) B. void BC(int a, char b)
C. float BC(int a, int b, int c=0) D. void BC(int a, int b=0)
34. 下面的哪一个保存字不能作为函数的返回类型?_____
A. void B. int C. new D. long
35. 下列关键字中,用以说明类中公有成员的是( )。
A friend; B private; C protected ;D public
36. 进行文献操作时需要包含( )文献。
A iostream.h ;B stdlib.h ;C stdio.h; D fstream.h
C 指向字符串常量的指针; D 指向字符串的指针常量
37. 能用作用户自定义标记符。
A friend B-var C)3xyz DFloat
38. 面向对象程序设计将数据与 放在一起,做为一个互相依存、不可分割的整体来解决。
A 对数据的操作 B 信息C数据隐藏 D数据抽象
39. 一个类的析构函数 。
A唯一的 B允许重载 C至多可有两个 D只能是缺省的
40. 下列说法对的的是: [ ] 。
A一个类的对象可以是另一个类的成员
B一个类可以作为另一个类的派生类
C一个类定义在另一个类的说明中
D以上说法均对的
41. 下列各类函数中, 不是类的成员函数。
A 构造函数 B析构函数 C 友元函数 D拷贝构造函数
42. 有关析构函数的说法不对的的是 。
A 析构函数有且只有一个 B 析构函数无任何函数类型
C析构函数和构造函数同样可以有形参D 析构函数的作用是在对象被撤消时收回先前分派的内存空间
43. 通常拷贝构造函数的参数是 。
A 某个对象名 B 某个对象的成员名
C 某个对象的引用名D 某个对象的指针名
44. 已知:类A中一个成员函数说明如下:void Set(A&a); 其中,A&的含义是( )。
A.指向类A的指针为a
B将a的地址值赋给变量Set
Ca是类A对象的引用,用来作函数Set()的参数
D.变量A与a按位与作为函数Set( )的参数
45. 已知:print( )函数是一个类的常成员函数,它无返回值,下列表达中,( )是对的的。
Avoid print( ) const; B.const void print( );
C.void const print( ); D.void print(const);
46. 类的析构函数是在_____调用的。
A.类创建时 B.创建对象时
C.删除对象时 D.不自动调用
47. 假如类A被说明成类B的友元,则_____
A.类A的成员即类B的成员 B.类B的成员即类A的成员
C.类A的成员函数不得访问类B的成员 D.类B不一定是类A的友元
二、填空题
(1)在用class定义一个类时,数据成员和成员函数的默认访问权限是 。
(2)具有纯虚函数的类称为 。
(3)派生类的重要用途是可以定义其基类中_______。
(4)当建立_______,程序自动调用该类的构造函数。
(5)类是用户定义的类型,具有类类型的变量称作_______。
(6)当一个成员函数被调用时,该成员函数的___指向调用它的对象。
(7)拷贝函数通过_______使用引用来初始化创建中的对象。
(8)静态成员函数、友元函数、构造函数和析构函数中,不属于成员函数的是 _________ 。
(9)对象的三大基本特性是多态性、_______、封装性。
(10) 当一个类对象离开它的作用域时, 系统将自动调用该类的______________.
(11)假定AB为一个类, 则执行"AB a[10];" 语句时, 系统自动调用该类构造函数的次数为_____________________.
(12)指向基类的对象的指针变量也可以指向 的对象。
(13)面向对象程序中,实体的状态由 表达,其行为由 表达。
(14)定义________函数时,应在参数个数或参数类型上有所不同。
(15)类是用户定义的类型,具有________称作对象。
(16)使用指向对象的指针来标记类的成员,则必须使用的运算符是_ 。
(17)拷贝初始化构造函数使用________来初始化创建中的对象。
(18) 封装规定一个对象应具有明确的功能,并具有 _________ 以便和其它对象互相作用。
(25)在删除一个动态对象时,将自动调用该动态对象所属类的 _________ 函数。
三、判断题
(1)在定义一个类时,不能在类说明中对数据成员使用表达式进行初始化。()
(2)假如在类声明中没有定义复制构造函数,就不能用一个对象去初始化另一个对象()
(3)类的两个基类中都有某个同名成员,在派生类中对这个成员的访问也许出现二义性。(对)
(4)在面向对象的程序设计中,凡操作属于同一种对象的,就将这些操作放进该对象类中,形成该类的成员函数。 ( )
(5)说明函数原型时不需要指明每个函数参数的名字,只需要说明每个参数的类型和返回值类型就可以了。( )
(6)所有的表达式都有值。 ( )
(7)程序的编译是以文献为单位的,因此将程序分到多个文献中可以减少每次对程序修改所带来的编译工作量。( )
(8)类的静态数据成员需要在定义每个类的对象时进行初始化。( )
四、程序填空
(1)在下面程序的横线处填上适当的语句,使该程序执行结果为10.
#include “iostream.h”
class MyClass
{ public:
MyClass(int a){x = a;}
//取x值
private:
int x;
};
int main()
{ MyClass my(10);
cout<<my.getnum()<<endl;
return 0;
}
(2)在下面程序的底画线处填上适当的字句,使该程序执行结果为60。
# include
class base{int X;
public∶
void int (int init X){X=init X; }
int Getnum() {return X+7; }
void main()
{_______
_______
cout<}
(3)在下面程序的底画线处填上适当的字句,完毕类中成员函数的定义。
# include
class box{ private∶
int color;int upx,upy;int lowx,lowy;
public∶
friend int same_color(line a,box b);
_______;
void define_box(int x1,int y1,int x2,int y2){upx=x1;upy=y1;}
};
class line{ private∶
int color;int startx,starty;int len;
public∶
friend_int same_color(line a,box b);
_______;
void define_line(int x,int y){startx=x;}
};
int same_color(line a,box b)
{if(a.color= =b.color)
return 1;
return 0;}
(4)在下面程序的底画线处填上适当的字句,完毕程序。
# include
class A{
_______(int i){cout<void g(){cout<<”g\n”;}
};
closs B∶A{
public∶void h(){cout<<”h\n”;}
_______;
};
void main()
{ B d1;
d1.f(6);
d1.h();
}
(5)在下列程序的空格处填上适当的字句,使输出为:0,8,5。
# include
# include
class Magic{
double x;
public∶
Magic(double d=0.00)∶x(fabs(d)){}
Magic _______{return Magic(sqrt(x*x+c.x*c.x));}
_______<<(ostream & os,Magic c){return os<};
void main()
{Magic ma;
cout<}
(6)在下面程序的底画线处填上适当的字句,使该程序执行结果为10。
#include <iostream.h>
class base{int X;
public:
________∥为X置值
________∥取X值
};
void main()
{base test;
test.init(3);
cout<<test.Getnum();
}
(7)在下列程序的底画线处填上适当的字句,完毕类中成员函数的定义。
#include <iostream.h>
class box{ private:
int color;int upx,upy;int lowx,lowy;
public:
friend int same-color(line a,box b);
________ set-color(int c){color=c;}
void define-box(int x1,int y1,int x2,int y2){upx=x1;upy=y1;}
};
class line{ private:
int color;int startx,starty;int len;
public:
friend-int same-color(line a,box b);
________set-color(int c){color=c;}
void define-line(int x,int y){startx=x;}
};
int same-color(line a,box b)
{if(a.color= =b.color)
return 1;
return 0;}
(8)在下面程序的底画线处填上适当的字句,完毕程序。
#include <iostream.h>
class A{
public: void f(int i){cout<<i<<endl;}
void g(){cout<<”\n”;}
};
class ________{
public: void h(){cout<<”h\n”;}
A∶∶f;
};
void main()
{ B d1;
d1.f(6);
________.h();
}
(9)在下列程序的空格处填上适当的字句,使输出为:0,7,5。
#include <iostream.h>
#include <math.h>
class Magic{
double x;
public∶
________(double d=0.00)∶x(fabs(d)){}
Magic operator+(Magic c){return Magic(sqrt(x*x+c.x*c.x));}
friend ostream & operator<<(ostream & os,Magic c){return os<<c.x;}
};
void main()
{
________;
cout<<ma<<’,’<<Magic(-7)<<’,’<<ma+Magic(3)+Magic(4);
}
(10)在下面程序横线处填上适当字句,以使该程序执行结果为:
5 4 3 2 1
0 5.5 4.4 3.3 2.2 1.1
#include <iostream.h>
template <class T>
void f ( ){
;
for (int i=0; i<n/2; i++)
t=a[i], a[i]=a[n-1-i], a[n-1-i]=t;
}
void main (){
int a[5]={1,2,3,4,5};
double d[6]={1.1,2.2,3.3,4.4,5.5};
f(a,5); f(d,6);
for (int i=0; i<5;i++)
cout <<a[i]<< ″ ″;
cout <<endl;
for (i=0; i<6; i++)
cout << d[i] << ″ ″;
cout << endl;
}
五、程序阅读题
1.分析以下程序执行的结果
#include<iostream.h>
#include<stdlib.h>
class Sample
{
public:
int x,y;
Sample(){x=y=0;}
Sample(int a,int b){x=a;y=b;}
void disp()
{
cout<<"x="<<x<<",y="<<y<<endl;
}
};
void main()
{
Sample s1(2,3);
s1.disp();
}
2.分析以下程序的执行结果
#include<iostream.h>
class Sample
{
int x,y;
public:
Sample(){x=y=0;}
Sample(int a,int b){x=a;y=b;}
~Sample()
{
if(x==y)
cout<<"x=y"<<endl;
else
cout<<"x!=y"<<endl;
}
void disp()
{
cout<<"x="<<x<<",y="<<y<<endl;
}
};
void main()
{
Sample s1(2,3);
s1.disp();
}
3.分析以下程序的输出结果
#include<iostream.h>
class Sample
{
int x;
public:
Sample(int a)
{
x=a;
cout<<"constructing object:x="<<x<<endl;
}
};
void func(int n)
{
static Sample obj(n);
}
void main()
{
func(1);
func(10);
}
4 分析以下程序的执行结果
#include<iostream.h>
class Sample
{
int x,y;
public:
Sample(){x=y=0;}
Sample(int a,int b){x=a;y=b;}
void disp()
{
cout<<"x="<<x<<",y="<<y<<endl;
}
};
void main()
{
Sample s(2,3), *p=&s;
p->disp();
}
5 分析以下程序的执行结果
#include<iostream.h>
class Sample
{
public:
int x;
int y;
void disp()
{
cout<<"x="<<x<<",y="<<y<<endl;
}
};
void main()
{
int Sample::*pc;
Sample s;
pc=&Sample::x;
s.*pc=10;
pc=&Sample::y;
s.*pc=20;
s.disp();
}
6 分析以下程序的执行结果
#include<iostream.h>
class Sample
{
int x,y;
public:
Sample(){x=y=0;}
Sample(int a,int b){x=a;y=b;}
void disp()
{
cout<<"x="<<x<<",y="<<y<<endl;
}
};
void main()
{
Sample s1,s2(2,3);
s1.disp();
s2.disp();
}
7 分析以下程序执行的结果
#include<iostream.h>
class Sample
{
int x,y;
public:
Sample() {x=y=0;}
Sample(int a,int b) {x=a;y=b;}
~Sample()
{
if(x==y)
cout<<"x=y"<<endl;
else
cout<<"x!=y"<<endl;
}
void disp()
{
cout<<"x="<<x<<",y="<<y<<endl;
}
};
void main()
{
Sample s1(2,3);
s1.disp();
s1.~Sample();
}
8 分析以下程序的执行结果
#include<iostream.h>
class Sample
{
int x,y;
public:
Sample() {x=y=0;}
Sample(int a,int b) {x=a;y=b;}
~Sample()
{
if(x==y)
cout<<"x=y"<<endl;
else
cout<<"x!=y"<<endl;
}
void disp()
{
cout<<"x="<<x<<",y="<<y<<endl;
}
};
void main()
{
Sample s1,s2(2,3);
s1.disp();
s2.disp();
}
9.分析以下程序的执行结果
#include<iostream.h>
#include<stdlib.h>
class Sample
{
public:
int x,y;
Sample(){x=y=0;}
Sample(int a,int b){x=a;y=b;}
void disp()
{
cout<<"x="<<x<<",y="<<y<<endl;
}
~Sample()
{
if(x==y)
cout<<"x=y"<<endl;
else
cout<<"x!=y"<<endl;
}
};
void main()
{
Sample s1(2,3);
s1.disp();
if(s1.x==2)
exit(0);
}
10.分析以下程序的执行结果
#include<iostream.h>
class Sample
{
int x,y;
public:
Sample(){x=y=0;}
Sample(int a,int b){x=a,y=b;}
~Sample()
{
if(x==y)
cout<<"x=y"<<endl;
else
cout<<"x!=y"<<endl;
}
void disp()
{
cout<<"x="<<x<<",y="<<y<<endl;
}
};
void main()
{
Sample(2,3);
}
11.分析以下程序的执行结果
#include<iostream.h>
class Sample
{
public:
Sample();
Sample(int);
~Sample();
void display();
protected:
int x;
};
Sample::Sample()
{
x=0;
cout<<"constructing normally\n";
}
Sample::Sample(int m)
{
x=m;
cout<<"constructing with a number:"<<x<<endl;
}
void Sample::display()
{
cout<<"display a number:"<<x<<endl;
}
Sample::~Sample()
{
cout<<"destructing\n";
}
void main()
{
Sample obj1;
Sample obj2(20);
obj1.display();
obj2.display();
}
12.分析以下程序的执行结果
#include<iostream.h>
class Sample
{
int n;
static int sum;
public:
Sample(int x){n=x;}
void add(){sum+=n;}
void disp()
{
cout<<"n="<<n<<",sum="<<sum<<endl;
}
};
int Sample::sum=0; // 静态数据成员赋初值
void main()
{
Sample a(2),b(3),c(5);
a.add();
a.disp();
b.add();
b.disp();
c.add();
c.disp();
}
13.分析以下程序执行的结果
#include<iostream.h>
class Sample
{
int A;
static int B;
public:
Sample(int a){A=a,B+=a;}
static void func(Sample s);
};
void Sample::func(Sample s)
{
cout<<"A="<<s.A<<",B="<<B<<endl;
}
int Sample::B=0;
void main()
{
Sample s1(2),s2(5);
Sample::func(s1);
Sample::func(s2);
}
14.分析以下程序的执行结果
#include<iostream.h>
class Sample
{
char c1,c2;
public:
Sample(char a){c2=(c1=a)-32;}
void disp()
{
cout<<c1<<"转换为"<<c2<<endl;
}
};
void main()
{
Sample a('a'),b('b');
a.disp();
b.disp();
}
15.分析以下程序执行的结果
#include<iostream.h>
class Sample
{
int x,y;
public:
Sample(){x=y=0;}
Sample(int a,int b){x=a;y=b;}
void disp()
{
cout<<"x="<<x<<",y="<<y<<endl;
}
};
void main()
{
Sample s1,s2(1,2),s3(10,20);
Sample *pa[3]={&s1,&s2,&s3};
for(int i=0;i<3;i++)
pa[i]->disp();
}
16. 分析以下程序的执行结果
#include<iostream.h>
class Sample
{
int x,y;
public:
Sample(){x=y=0;}
Sample(int a,int b){x=a,y=b;}
void disp()
{
cout<<"x="<<x<<",y="<<y<<endl;
}
};
void main()
{
Sample s1,s2(1,2),s3(10,20);
Sample *Pa[3];
Pa[0]=&s1;
Pa[1]=&s2;
Pa[2]=&s3;
for(int i=0;i<3;i++)
Pa[i]->disp();
}
17. 分析以下程序的执行结果
#include<iostream.h>
class Sample
{
public:
int x;
int y;
void disp()
{
cout<<"x="<<x<<",y="<<y<<endl;
}
};
void main()
{
int Sample::*pc;
Sample s,*p=&s;
pc=&Sample::x;
p->*pc=10;
pc=&Sample::y;
p->*pc=20;
p->disp();
}
18.分析以下程序的执行结果
#include<iostream.h>
class Sample
{
int x;
int y;
public:
Sample(int a,int b)
{
x=a;y=b;
展开阅读全文