1、面向对象程序设计复习资料 (2328) 一、 单项选择题 1.假设P是指针, 声明指针s引用指针p正确方法是 ( ) A.int* s&=p B.int &*s=p C.int *&s=p D.int s* &=p 2.在C+ +中, 能够为类的所有成员共享的是 ( ) A、 枚举成员 B、 公有数据成员 C、 私有函数成员 D、 公有函数成员 3.C+ +中, 下列哪个关键字不能提供封装。
2、 ( ) A、 struct B、 union C、 class D、 case 4.下而关于类的复制构造函数的说法正确的是 ( ) A.一个类只能有一个复制构造函数 B.能够为void类型 C.不能有返回类型 D.不能使用缺省参数 5.下面叙述正确的是: ( ) A.派生类不能够使用私有派生
3、 B.保护派生时, 基类的保护成员在派生类中是公有的 C.对基类成员的访问能够允许两义性 D.赋值兼容规则也适用于多重继承的组合 6.定义虚函数使用关键字 ( ) A.: : B.virtual C.& D.-> 7.在下面几项中, 运算符在C++中能被重载的是 ( ) A .= B.? : C.sizeof D. : : A.结构 B.类 C.继承 D.引用
4、 8.在执行下面程序语句之后, num的值为 ( ) int num = 500; int& ref= num; ref = = ref -50; A.450 B.500 C.-50 D.无法确定 9.所有在函数外面定义的变量, 连同形式参数, 都属于 ( ) A、 局部变量 B、 全局变量 C、 静态变量 D、 寄存器变量
5、 10.面向对象的程序中, 哪项不是对象的特点。 ( ) A、 多态性 B、 抽象性和封装性 C、 中断 D、 继承性 11.下面在半初始化说法正确的是 ( ) A.初
6、始化列表能够初始化任何类 B.初始化列表也也能够初始化具有私有成员的类 C.初始化列表只能初始化公有数据成员 D.初始化列表能够初始化所有数据成员 12.产生编译时的多态性的必要条件是使用 ( ) A.静态成员 B.友元函数 C.重载成员函数 D.虚函数 13.operator经常和C++的一个运算符连用,构成一个运算符函数
7、名.运算符函数的返回类型不能是 ( ) A.void B.char C.int D.float 14.下面是对C++运算符的叙述, 正确的叙述是 ( ) A.只有类运算符 B.只有友元运算符 C.同时具有类运算符和友元运算符
8、 D.同一个运算符只能重载一次 15. 在面向对象的设计中,一切都是围绕着什么展开的 ( ) A.类 B.结构 C.数据类型 D.对象 16. 下面哪项不能算是面向对象程序设计所具有的显著特点 ( ) A .封装 B.继承 C.抽象 D.递归 17. 下面选项中哪一项不是结构和类的共同特性 ( ) A.对象能够用作数组的元素 B.在缺省情况下, 成员是私有的 C.对象之间能够
9、相互赋值 D.能够说明指向对象的指针和引用 18.下面有关类性质说法错误的是 ( ) A.一个类能够有多个构造函数,但只有一个析构函数 B.析构函数和构造函数都不能有返回类型 C.不能够给析构函数指定参数 D.一个类中不能够说明具有类类型的数据成员 19. 下面叙述不正确的是
10、 ( ) A.成员的访问能力取决于派生方式 B.基类的私有成员在公有派生类中不可访问 C.对象能够访问所有成员 D.公有基类成员在保护派生中保护的 20.成为抽象类的一个条件是这个类 ( ) A.至少有一个纯虚函数 B.至少有一个虚函数 C.只含有一个纯虚函数 D.只含有一个虚函数 21. 下列叙述正确的是
11、 ( ) A.有1个运算符不能被重载 B.有2个运算符不能被重载 C.有3个运算符不能被重载 D.有4个运算符不能被重载 22.在以下选项中, 不属于模板特点的选项是 ( ) A.处理数据时, 处理的是不同类型的相同操作 B.声明不需要给出数据类型 C.对于相同的数据类型产生不同的实例 D.对于不同的数据类型能够产生不同的实例 23. 经过什么建立类树
12、 ( ) A.类 B.虚函数 C.多重继承 D.单一继承 24.C++使用新的分配动态内存的函数是 ( ) A . malloc ( ) B. free( ) C. delete D. new 25.以下关于C+
13、 +对象特点叙述不正确的是 ( ) A、 对象能够进行四则运算 C、 对象能够用作数组的元素 C、 对象能够用作函数参数 D、 对象之间能够相互赋值 26. 有关复制构造函数说法错误的是 ( ) A.复制构造函数不能使用初始化列表 B. 复制构造函数不能有返回值 C. 复制构造函数名与类名相同并能够有多个复制构造函数 D. 复制构造函数的参数能够为引用对象
14、 27.对友元函数描述正确的是 ( ) A.一个类的友元函数是该类的一个特殊成员函数 B.一个类的友元函数能够访问类的所有数据成员 C.友元函数只允许访问该类对象的私有成员 D.友元函数只允许访问该类的公有成员 28.进行文件操作时需要包含的头问家是 ( ) A.iostream.h
15、 B. fstream.h C.stdio.h D. stdlib.h 29. 下面关于类模板叙述不正确的是 ( ) A.声明类模板”; ”号结束 B.不能重载运算符 C.能够使用友元函数 D.能使用虚函数 30.系统不会为类自动建立什么成员函数 ( ) A.默认构造函数 B.默认析构函数 C.默认虚析构函数 D.默认赋值运算赋 二、 填空
16、题: 1.函数 int * func(void)的返回类型是__ _ __. 2.C+ +中, 关键字 用作联合. 3.关键字virtual能够用来声明 类. 4.抽象类至少要含有一个 ,这种函数属于虚函数 5.成员函数”void print( )const;”是类的 函数, 它只能被const对象调用。 6.声明double的转换函数是 。 7.模板分为 模板和类模板。 8.类群是由一些彼此互不相关的 组成。 9.
17、类的作用于限定符是 。 10..Base(Base&)是类Base的_ __函数的原型声明,它的等效形式为Base(const Base&)。 11.要想取消动态联编,能够使用 ,它的另一个基本用途是避免两义性. 12.声明double的转换函数是 。 13.根据类对其成员的要求, 可把类分为 模板和无约束模板。 14.在面向对象程序设计时, 函数一定既提供了接口也提供了实现。 15.函数func(int &a)里面使用return; 语句, 则函数的返回值类型
18、为_ _. 16.一般使用类中的 函数供类内部的成员函数使用, 能够实现更好的封装性。 17.成员名限定的符号是_ _,它能够在引用成员时避免两义性. 18.对类的构造函数而言,析构函数能够为虚函数, 不能够为虚函数. 19.指向类成员的指针引入了新的运算符 和->*. 20.使用友元重载提取符函数时, 它的第2个参数必须使用 形式。 21.一个模板声明能够列出多个参数, 多个参数之间必须使用 隔开。 20.设计类的基本原则应该是 。 22.语句int * x
19、new int(58);使*x . 23.如果要为其它对象提供相互作用的接口, 能够通时 函数实现。 24.空类Empty的声明形式为 。 25.只有 继承的情况下, 基类的派生类之间才有赋值兼容性规则。 26.产生多态性要求类之间的继承关系满足 。 27.使用友元重载提取符函数时, 它的第2个参数必须使用 形式。 28.类群是由一些彼此互不相关的 组成。 三、 改错题 1.指出下面程序段中的错误。 const int R= 15; R=3 *R; int m
20、 =50-R;
cout << m <
21、
public:
base(int a):m(a){};
int Getx(){retum m;}
};
class derived : private base
{
int n;
public:
derived(int a, int b):m(a){n=b;};
};
4.改正下面程序段中的错误, 使其能正确输出数组第五项的内容。
# include 22、理由。
class base
{
private:
int x, y;
void setxy(int a, int b)}{x=a; y=b}
public:
void show (base * p)
{cout< 23、{return m; }
~ base( ){delete p}
};
7.仔细阅读下面程序, 其中有一个成员函数定义不正确, 找出并改正错误。
#include 24、{
int * pa;
int * &pb= pa;
int x = 386;
pb =&x;
cout<<*pb< 25、ut< 26、ut << m < 27、
class B:public A{
int b;
public:
B(int m, int n){a=m;b=n;}
};
14.给出类声明中的转换函数的定义。
Class number{
private:
int val;
public:
number( int I ) { val =I;}
operator int();
};
四、 完成程序题
1.在下面程序中的下划线处填上内联fun函数的原型声明、 返回类型和调和调用语句。
# include 28、void main()
﹛
int a=5;
int b=8;
cout<
class base
{
private:
int x;
29、public:
void set(int a){x=a;}
void show()
{
______ ______}
};
void main()
{
base a,b;
a.set(589);
a.show();
__
b.show;
}
3.完成下面程序, 使其输出为:
-2.589000e +001
+2.589000e +001
程序如下:
# include 30、setf(ios::scientific | ios::left | ios::showpos);
cout << -25.89F << endl;
cout<< 25.89f << endl;
}
4.使用内联函数重新定义下面求两个整数最小值的宏定义。
#define MAX(a,b)(a 31、est::tese(int a,int b)
{m=a;n=b}
void test::show()
{cout< 32、
int *a=int new(56);
int
cout<<*a<<""<<*p< 33、 补上所缺类说明文件的最小形式( 成员函数使用原型声明) 。
# include(iostream h)
# include ”base.h”
void main()
{
base obj(1,2,3);
base obj2(obj1);
}
10.在主函中的下划线处填上正确的语句使程序输出并说明理由。
A place.
Here is B place .
Here is B place.
程序如下:
class B: public A
{
public:
void display(char*b){cout<<”Here is”< 34、
};
void main()
{ A a,*pa;
display(__ _ _ );
B b;
b.display(B place );
pa=_ ____;
pa->display(B place );
}
11.完成一面程序, 使其输出”56 56”, 并在退出运行时正确释放分配给指针的存储空间。所给程序如下:
# include 35、
}
12.在下面程序的下划线处填上正确的语句, 使类的数据成员i的值为20, 输出为35。
#include 36、I;}
operator int();
};
五、 程序分析题
1.# include < iostream.h >
void main ()
{
int n=333;
int&m =n;
cout<< m;
m=m+150;
cout<<” ”< 37、
void change(char a)
{c=a+32; cout< 38、<<”Entering main” < 39、
cour < <256 < < ”OK” < < endl:
}
5.分析下面程序输出结果。
#include 40、 ){return x;}
};
# include 41、 { cout <<"初始化..."<
# include < iomanip.h >
Viod main ( )
{
Cout < 42、 < 15 < < endl:
Cout < < setw ( 8 ) < 43、e 44、a;
p=new int(x +2);
cout < <*p < 45、 39)
a.show(&a);
}
12.分析下面程序的输出结果。
# include 46、};
void main()
{
B b(256.285),c(b);
c.show()
}
13.分析程序功能并给出输出结果。
# include < iostream .h >
# include < fstream .h >
Viod main ( void )
{
Fstream fin,fout;
Fout.open(”my.txt”,ios::out);
If(! fout.is_open())
Retnrn;
For(int i=0;i<=10;i=i+2)
Fout<<”This is line 47、<
class A
{
int a;
pubic:
A(int a=0):a(a






