《c++第2章-类和对象习题》由会员分享,可在线阅读,更多相关《c++第2章-类和对象习题(8页珍藏版)》请在金锄头文库上搜索。
1、1 / 8 面向对象程序设计习题 班级:学号:姓名:序号:成绩: 第 2 章 类与对象 一、选择题(共 26 分,每题 1 分) 1以下有关类的说法不正确的是( ) 。 A 对象是类的一个实例 B 任何一个对象只能属于一个具体的类 C 一个类只能有一个对象 D 类与对象的关系和数据类型与变量的关系相似 2下面( )项是对构造函数和析构函数的正确定义。 Avoid X:X(), void X:X() BX:X(参数), X:X() CX:X(参数), X:X(参数) Dvoid X:X(参数), void X:X(参数) 3 ( )的功能是对象进行初始化。 A析构函数 B. 数据成员 C.构造函
2、数 D.静态成员函数 4以下表达方式正确的是( ) 。 Aclass P B class P public:public: int x=15; int x; void show()coutx;void show()coutx; ; C class P D. class P int f; public: ; int a; f=25; void Seta (int x) a=x; ; 5拷贝构造函数具有的以下特点中, ( )是错误的。 A 如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的 B 拷贝构造函数只有一个参数,并且是该类对象的引用 C 拷贝构造函数是一种成员函数 D 拷贝构造函
3、数的名字不能用类名 6关于静态成员的描述中, ( )是错误的。 A 静态成员可分为静态数据成员和静态成员函数 B 静态数据成员定义后必须在类体内进行初始化 C 静态数据成员初始化不使用其构造函数 D 静态数据成员函数中不能直接引用非静态成员 7关于友元的描述中, ( )是错误的。 2 / 8 A 友元函数是成员函数,它被说明在类体内 B 友元函数可直接访问类中的私有成员 C 友元函数破坏封装性,使用时尽量少用 D 友元类中的所有成员函数都是友元函数 8对类的构造函数和析构函数描述正确的是() 。 A. 构造函数可以重载,析构函数不能重载 B. 构造函数不能重载,析构函数可以重载 C. 构造函数
4、可以重载,析构函数也可以重载 D. 构造函数不能重载,析构函数也不能重载 9类的析构函数的作用是(D) 。 A.一般成员函数 B.类的初始化 C.对象初始化 D.删除对象 10假设 OneClass 为一个类,则该类的拷贝初始化构造函数的声明语句为() 。 A.OneClass(OneClass p); B. OneClass& (OneClass p); C. OneClass(OneClass & p); D. OneClass (OneClass *p); 11下面对于友元函数描述正确的是() 。 A.友元函数的实现必须在类的内部定义 B.友元函数是类的成员 C.友元函数破坏了类的封装性
5、和隐藏性 D.友元函数不能访问类的私有成员 12对于结构中定义的成员,其默认的访问权限为() 。 A.public B. protected C.private D. static 13 为了使类中的某个成员不能被类的对象通过成员操作符访问, 则不能把该成员的访问权限定义为() 。 A.public B. protected C.private D. static 14下面对静态数据成员的描述中,不正确的是() 。 A.静态数据成员可以在类体内进行初始化 B.静态数据成员不可以在类体内进行初始化 C.静态数据成员不能受 private 控制符的作用 D.静态数据成员调用前必须初始 15下面对静
6、态数据成员的描述中,正确的是( ) 。 A.静态数据成员是类的所有对象共享的数据 B.类的每一个对象都有自己的静态数据成员 C.类的不同对象有不同的静态数据成员值 D.静态数据成员不能通过类的对象调用 16以下有关类的说法不正确的是。 A.类是一种用户自定义的数据类型 B.只有类中的成员函数或类的友元函数才能存取类中的私有数据 C.在类中(用 class 定义),如果不作特别说明,所有的数据均为私有数据 D.在类中(用 class 定义),如果不作特别说明,所有的成员函数均为公有数据 17 以下有关析构函数的表达不正确的是( ) A. 在一个类只能定义一个析构函数 B. 析构函数和构造函数一样
7、可以有形参 C. 析构函数不允许用返回值 D. 析构函数名前必须冠有符号“” 18 以下有关类与结构体的表达不正确的是( ) A. 结构体中只包含数据;类中封装了数据和操作 B. 结构体的成员对外界通常是开放的;类的成员可以被隐藏 C. 用 struct 不能声明一个类型名;而 class 可以声明一个类名 3 / 8 D. 结构体成员默认为 public;类成员默认为 private 19 以下表达中不正确的是( ) A. 一个类的所有对象都有各自的数据成员,可以共享函数成员 B. 一个类中可以有多个同名的成员函数 C. 一个类中可以有多个构造函数、多个析构函数 D. 在一个类中可以声明另一
8、个类的对象作为它的数据成员 20 以下不属于构造函数特征的是( ) A. 构造函数名与类名相同 B. 构造函数可以重载 C. 构造函数可以设置默认参数 D. 构造函数必须指定函数类型 21 以下有关类和对象的表达不正确的是( ) A. 任何一个对象都归属于一个具体的类 B. 类与对象的关系和数据类型与变量的关系相似 C. 类的数据成员不允许是另一个类的对象 D. 一个类可以被实例化成多个对象 22 设有定义: class person int num; char name10; public: void init(int n, char *m); . ; person std30; 则以下表达
9、不正确的是( ) A. std 是一个含有个元素的对象数组 B. std 数组中的每一个元素都是 person 类的对象 C. std 数组中的每一个元素都有自己的私有变量 num 和 name D. std 数组中的每一个元素都有各自的成员函数 init 23 设有以下类的定义: class Ex int x; public: void setx(int t=0); ; 若在类外定义成员函数 setx(),以下定义形式中正确的是( ) A. void setx(int t) . B. void Ex:setx(int t) . C. Ex:void setx(int t) . D. void
10、 Ex:setx() . 24 以下关于静态成员变量的表达不正确的是( ) A静态成员变量为类的所有对象所公有 B静态成员变量可以在类内任何位置上声明 C静态成员变量的赋初值必须放在类外 D定义静态成员变量时必须赋初值 4 / 8 25 定义静态成员函数的主要目的是( ) A方便调用 B有利于数据隐藏 C处理类的静态成员变量 D便于继承 26 以下表达不正确的是() ,使用静态数据成员: A可以节省内存空间 B是为了解决数据共享问题 C可以直接用类名来引用 D可以提高序运算速度 二、填空题(共 18 分,每题 1 分) 1设有如下程序结构: class Box ; void main() Bo
11、x A,B,C; 该程序运行时调用次构造函数;调用次析构函数。 2设 A 为 test 类的对象且赋有初值,则语句 test B(A); 表示。 3利用“对象名.成员变量”形式访问的对象成员仅限于被声明为 的成员;若要访问其他成员变量,需要通过函数或函数。 4 OOP 技术由、 、方法、消息和继承五个基本的概念所组成。 5类的成员函数可以在定义,也可以在 定义。 6类 test 的构造函数是和_同名的函数,析构函数名是。 7类是用户定义的类型,具有类类型的变量称作_。 8一个类的析构函数不允许有 。 9建立对象时,为节省内存,系统只给_分配内存。 10类中的数据和成员函数默认访问类型为。 11
12、当建立一个新对象时,程序自动调用_。 12成员函数在类体外定义格式是: _。 三、改错题(共 10 分,每题 2 分) 1 下面的程序定义了一个 Point 类,找出程序中的错误语句并改正。 #include class Point int x; public: void Point(int a) x=a; int Getx()return x; void Show() coutGetx()endl; ; void main() Point A(76); coutA.Show(); 5 / 8 2 根据静态成员的特点,指出以下程序的错误。 #include #include class Par
13、t public: Part(char *pname=”no name”) strncpy(name,pname); noofpart+; no=noofpart; cout”create the no: ”noofpart”of part”endl; Part() noofpart-; cout”destroy the no: ”noofpart”of part”endl; static int number() return no; protected: static int noofpart=0; int no; char name40; ; void main() Part p1; P
14、art p2; 3以下程序的功能是:利用友员函数为类的成员变量进行初始化,然后利用成员函数输出。请改正程序中的错误,使之能正确运行。 #include class A int a,b; public: friend void setval(int i,int j); void showA() couta,bendl; ; void setval(int i,int j) a=i; b=j; void main() A obj1; setval(2,3); obj1.showA(); 4分析找出以下程序中的错误,说明错误原因,给出修改方案使之能正确运行。 #include 6 / 8 class
15、 one int a1,a2; public: one(int x1=0, x2=0); ; void main() one data(2,3); coutdata.a1endl; coutdata.a2endl; 5分析以下程序的错误原因,给出修改方案使之能正确运行。 #include class Amplifier float invol,outvol; public: Amplifier(float vin,float vout) invol=vin;outvol=vout; float gain(); ; Amplifier:float gain() return outvol/inv
16、ol; void main() Amplifier amp(5.0,10.0); coutgain()endl; 四、看程序写结果(共 16 分,每题 4 分) 1 #include class test public: test(); test(int); test(); void display(); protected: int n; ; test:test() cout”Constructing normallyn”; test:test(int num) n=num; cout”Constructing with a number: ”nendl; void test:display
17、() cout”Display a number: ”nendl; test:test()cout”Destructing”endl; 7 / 8 void main() test obj1; test obj2(59); obj1.display(); obj2.display(); 2 #include class Count public: Count() count+; static int getn() return count; Count() count-; private: static int count; ; int Count:count=100; void main()
18、 Count c1,c2,c3,c4; coutCount:getn()endl; 3 #include class myclass int a,b; public: void init(int i, int j) a=i; b=j; friend int sum(myclass x); ; int sum( myclass x) return x.a+x.b; void main() myclass y; y.init(15,20); coutsum(y)endl; 4#include class point int x,y; public: point(int a,int b) x=a;y
19、=b; 8 / 8 coutcalling the constructor function.endl; point(point &p); friend point move(point q); point()coutcalling the destructor function.n; int getx() return x; int gety() return y; ; point:point(point &p) x=p.x; y=p.y; coutcalling the copy_initialization constructor function.n; point move(point
20、 q) coutOK!n; int i,j; i=q.x+10; j=q.y+20; point r(i,j); return r; void main() point m(15,40),p(0,0); point n(m); p=move(n); coutp=p.getx(),p.gety()endl; 五、编程题(共 30 分,每题 10 分) 1某商店经销一种货物,货物成箱购进,成箱卖出,购进和卖出时以重量为单位,各箱的重量不一样,因此,商店需要记下目前库存货物的总量,要求把商店货物购进和卖出的情况模拟出来。 2定义一个 Car 类和 Truck 类,用友元实现两类对象行使速度的快慢比较。 3定义一个学生类,其中有 3 个数据成员:学号、姓名、年龄,以与若干成员函数。同时编写 main 函数使用这个类,实现对学生数据的赋值和输出。