ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:23.51KB ,
资源ID:6384058      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6384058.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(面向对象编程部分习题答案.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

面向对象编程部分习题答案.docx

1、面向对象编程部分习题答案1 类与对象1.1 填空题(1)类和对象是面向对象程序设计的两个最基本概念, 类 表示抽象的概念,而_对象_则是_类_的实例化。(2)类的成员包括_数据成员_和_成员函数_两类,其中类的_成员函数_是为类的所有对象所共有的。(3)类的数据成员_不能_在类定义时进行初始化。(能/不能)(4)类成员的访问方式包括_ private _、_ protected _和_ public _3种,默认的访问方式是_ private _。(5)类中声明友元的关键字是_ friend _。(6)在类的外部定义成员函数时应在函数名的前面加上_类名_和_作用域运算符_。(7)访问对象的成员

2、有_对象名.成员名_、_指针变量名-成员名_和_(*指针变量名).成员名_3种格式。(8)_构造_函数和_析构_函数是类的两种特殊的成员函数。_构造_函数负责完成对象的创建和初始化工作,_析构_函数负责完成对象消失时的内存清理工作。(9)类的_常量数据_成员和_引用数据_成员需用初始化表的方式提供初值。(10)类的静态数据成员的初始化应该写在_全局_区域上,而且要指明_数据类型_和_所属的类_。(11)常对象只能调用类中的_常成员_函数,该函数为类的_只读_函数。(12)类的私有成员和保护成员只能被该类的_成员_函数和_友元_函数访问。(13)类的每一个成员函数都有一个隐含定义的指针,称为_

3、this _指针,它的类型是成员函数所属类的类型。1.2选择题(1)下列关于类和对象的描述中,不正确的是( C)。A 一个对象只能属于一个类B 对象是类的一个实例C 一个类只能有一个对象D 类和对象的关系与数据类型和变量的关系类似 (2) 若有如下声明: class A int a; 则A类的成员a是(C)。 A 公有数据成员 B 公有成员函数 C 私有数据成员 D 私有成员函数 (3) 下列关于成员函数的描述中,不正确的是(B)。 A 成员函数可以重载 B 成员函数一定是内联函数 C 成员函数可以是静态的 D 成员函数可以设置参数的默认值 (4) 在类外定义成员函数时,需要在函数名前加上(C

4、)。 A 对象名 B 类名 C 类名和作用域运算符 D 作用域运算符 (5) 下列关于this指针的描述中,正确的是(D)。 A 任何与类相关的函数都有this指针 B 类的成员函数都有this指针 C 类的友元函数都有this指针 D 类的非静态成员函数才有this指针 (6) 下列关于构造函数的描述中,不正确的是(C)。 A 构造函数的函数名与类名相同 B 构造函数可以重载 C 构造函数必须指定函数类型 D 构造函数可以设置参数的默认值 (7) 在下列函数原型中,可以作为类A构造函数的是(D)。 A voidA(int); B int A(); C A(int)const D A(int)

5、; (8) 下列关于析构函数的描述中,不正确的是(B) A 析构函数有且只有一个 B 析构函数可以参数 C 析构函数没有函数类型 D 析构函数的作用是在对象被撤销时清理其内存空间 (9) 若有如下定义类: class Point int x,y; public: Point():x(0),y(0) Point(int a,int b=0):x(a),y(b);若执行语句Point a(2),b3,*c4;则Point类的构造函数被调用的次数是(C)。A 2次 B 3次 C 4次 D 5次 (10) 下列关于new运算符的描述中,不正确的是(D)。 A 使用new运算符可以用来动态创建对象和对象

6、数组 B 使用new运算符创建的对象可以使用delete运算符来释放 C使用new运算符创建对象时,会调用类的构造函数 D使用new运算符创建对象数组时,必须定义初始值 (11) 下列关于常对象和常成员的描述中,正确的是(A) A 类的普通成员函数不能对常对象进行操作 B 类的成员函数可以对常对象进行操作 C 除常成员函数外,其他函数不可以对常对象进行操作 D 在常成员函数中,常对象可以被更新 (12) 下列关于静态数据成员的描述中,正确的是(C)。 A 类的不同对象有不同的静态数据成员 B 静态数据成员不能通过类的对象访问 C 静态数据成员是类的所有对象共享的 D 类的每一个对象都有自己的静

7、态数据成员 (13) 一个类的友元函数或友元类可以访问该类的(D)。 A 私有成员 B 保护成员 C 公有成员 D 私有成员、保护成员和公有成员 (14) 在C+语言中,数据封装要解决的问题是(D) A 数据的规范化 B 便于数据的转换 C 避免数据的丢失 D 防止不同模块之间非法的数据访问 (15) 若有如下类定义: Class A int a; public : int getRef() constreturn &a; / int getVlaue() constreturn a; / void set(int n) consta=n; / friend void show(A aa) c

8、onst counta; /; 其中的4个函数定义中正确的是(B)。A B C D 1.3 改错题 下列程序段中是否有错?如果有错,请指出错误的位置和原因。 (1) class Worker private: char name20; float salary; public: void init(char name,float salary); void print();void main() Worker man1,man2; man1.salary=1000.00; /答案:man1.salary=1000.00; 不能在类域外通过对象直接访问类的私有成员 (2) class C1 pr

9、ivate: float r=0; float c=0; /答案: float r=0;和float c=0; 类本身是抽象的,不能在类的定义体中给其数据成员赋值; 后缺少分号“;” (3) #include class Circle private: float x; float y; float r; public: void setdata(float x1, float y1, float r1); void printdata();void printdata() coutx”,”y”,”rendl;答案:成员函数void printdata()定义时应在函数名之前添加所属类的类名及

10、作用域运算符。 (4) class Point private: float x; float y; public: point()x=0;y=0; void print()coutx”,”yendl;答案: 构造函数名point()应与类名同名,为Point。1.4 读程序写结果题 (1) #include class Myclass private: int x; int y; public: Myclass(int a,int b)x=a;y=b; Myclass()x=0;y=0; void print();void Myclass:print() cout”x=”x”,”y=”yen

11、dl;void main() Myclass c1,c2(100.200); C1.print(); C2.print ();答案: x=0,y=0x=100,y=200 (2) #include class C1 private: int x; int y; public: C1() C1(int a,int b); void printc1 (); ; class C2 private: C1 z; float t; public: C2() C2(int a,int b,float); void printc2(); ; C1:C1(int a,int b) x=a; Y=b; C2:C

12、2(int a,int b,float c):z(a,b),t(c) void C1:printc1() cout”x=”x”,”y=”yendl;void c2:printc2() z.printc1 (); cout”t=”t;void main() c1 m(100.200); m.printc1(); c2 n(1000,2000,float(3.14); n.printc2(); 答案: x=100,y=200x=1000,y=2000t=3.14 (3) #include class Sta pricate: int a; static int b; public: void fu

13、n1(Sta &r); static int fun2();int Sta:b=10;void Sta:fun1(Sta &r) r.a=20; cout”r.a=”r.aendl;int Sta:fun2() return b+;void main() cout”Sta:fun2()=”Sta:fun2()endl; Sta s: cout”s.fun2()=”s.fun2()endl; s.fun1(s);答案: Sta:fun2()=10s.fun2()=11r.a=20 (4) #include class Call private: int x; public: Call(); Ca

14、ll(int a); void show(); Call();Call:Call() x=0; cout”Constructor1 called!”endl;Call:Call(int a) x=a; cout”Constructor2 called!”endl;void Call:show() cout”x=”xendl;Call:Call() cout”Destructor called!”endl;void main() call c1; c1.show(); call c2(100); c2.show();答案:Constructor1 called!x=0Constructor2 c

15、alled!x=100Destructor called!Destructor called! (5) #include using namespace std; class A int n; public: A(int k):n(k) int get()return n; int get()const return n+1;int main() A a(5); const A b(6); couta.get()b.get(); Return 0;答案:572 继承与派生2.1填空题(1)面向对象程序设计的 继承 机制实现了代码重用,有效地缩短了程序的开发周期。(2)在继承关系中,被继承的类成

16、为 基类 ,通过继承关系定义出来的新类称为 派生类 。(3)派生类的继承方式有 private 、 protected 和 public 3种,其中默认的继承方式为 private 。(4)公有继承时,基类的私有成员成为派生类的 不可访问 成员,基类的保护成员成为派生类的 保护 成员,基类的公有成员成为派生类的 公有 成员。(5)在派生类中不能访问基类的 私有 成员,这符合面向对象程序设计的封装思想。(6)C+语言不仅支持 单(一) 继承,也支持 多(重) 继承。(7)根据联编实现的不同阶段,可将其分为 静态 联编和 动态 联编两种。(8)声明了纯虚函数的类,称为 抽象类 。(9)运算符重载是

17、一种特殊的 函数重载(10)对于运算符的重载可以有_重载为类的成员函数_和_重载为类的友元函数_两种方法。(11)_ Operator _和运算符一起可以组成运算符函数的函数名。(12)对于双目运算符,若重载为类的成员函数,有_1_个参数;若重载为友元函数,则有_2_个参数。(13)运算符不能作为类的_友元_函数重载。2.2选择题(1)下列关于派生类的描述中,不正确的是( B )。A 派生类的成员除了包含它自己的成员外,还包含其基类的成员。B 派生类中继承的基类的成员的访问权限在派生类中保持不变。C 派生类至少有一个基类。D 一个派生类可以作为另一个派生类的基类(2)在保护继承中,基类的私有成

18、员变成派生类的( A )A 不可访问成员 B 私有成员 C 保护成员 D 公有成员(3)若有如下类声明: Class Base int k; public: void set(int n)k=n; int get( )constreturn k;Class derived:protected Base protected: int j; public: void set(int m,int n) Base:set(m); j=n; int get( )const return base:get()+j; ;则类derived中保护的数据成员和成员函数的个数是( B )。A 4 B 3 C 2

19、D 1 (4) 在派生类的构造函数的初始化表中,不能包含 ( C )。A 基类的构造函数 B 派生类的一般数据成员的初始化C 基类的子对象的初始化 D 派生类的子对象的初始化 (5)若有如下类声明: Class X int x;public: X(int n)x=n;Class Y:public X int y; public:Y(int a,int b); ;在构造函数Y的下列定义中,正确的是( B )。A Y:Y(int a,int b):x(a),y(b) B Y:Y(int a ,int b):X(a),y(b)C Y:Y(int a,int b):x(a)Y(b) D Y:Y(int

20、 a,int b):X(a),Y(b)(6) 在多重继承中,对于基类成员在派生类中的访问权限与单继承的规则( A )。A 完全相同 B 完全不同 C部分相同 D 以上均不正确 (7)下列说法中不正确的是( D )。A 私有继承时,基类的公有成员在派生中是私有成员B 保护继承时,基类的公有成员在派生中是保护成员C 公有继承时,基类的公有成员在派生中是公有成员D 公有继承时,基类的私有成员在派生中是私有成员(8)下列描述中不正确的是( B )。 A 派生类的对象可以赋值给基类对象 B 基类的对象可以赋值给派生类对象 C 派生类的对象可以初始化为基类的引用 D 派生类的对象的地址可以赋给指向基类的指

21、针(9)下列关于虚基类的描述中,不正确的是( B )。 A 使用虚基类的目的是消除多重继承下的二义性 B 虚基类中的子对象的初始化次数与该虚基类的派生类的个数有关 C 虚基类中的子对象只初始化一次 D 虚基类的多层派生类构造函数的成员初始化列表中都要列出对虚基类构造函数的调用(10)运行时的多态性是指( B )。 A用指向对象的基类指针或引用调用一个纯虚函数 B用指向对象的基类指针或引用调用一个虚函数 C 以任何方式调用一个纯虚函数 D以任何方式调用一个虚函数(11) 在C+中,用于实现运行时多态性的是( D )。A 内联函数 B重载函数 C 模板函数 D 虚函数(12)下列关于虚函数的描述中

22、,正确的是( B )。A 从虚基类继承的函数都是虚函数 B虚函数不得是静态成员函数 C 只能通过指针或引用调用虚函数 D 抽象类中的成员函数都是虚函数(13)下列关于运算符重载的描述中,正确的是( B )。A)通过运算符重载,可以定义新的运算符B)有的运算符只能作为成员函数重载C)若重载运算符+,则相应的运算符函数名是+D)重载一个二元运算符时,必须声明两个形参(14)下列表达式中,运算符“/”的意义相同的一对是( D )。A)3/2和3.0/2.0 B)3/2和3/2.0C)3/2和3.0/2 D)3.0/2.0和3.0/2(15)在重载一个运算符时,其函数的参数表中没有任何参数,这说明该运

23、算符是( A )。A)一元成员运算符 B)二元成员运算符C)一元友元运算符 D)二元友元运算符(16)以下运算符中既可以重载为类的成员函数,又可以重载为类的友元函数的是( D )。A)= B)() C) D)+(17)已知在一个类体中包含如下函数原型:X operator-(X)const;下列关于这个函数的描述中,不正确的是( B )。A)这是运算符-的重载运算符函数B)这个函数所重载的运算符是一个一元运算符C)这是一个成员函数D)这个函数不改变类的任何数据成员的值(18)在表达式x+y*z中,+是作为成员函数重载的运算符,*是作为友元函数重载的运算符。下列描述中正确的是( C )。A)op

24、erator+有两个参数,operator*有两个参数B)operator+有两个参数,operator*有一个参数C)operator+有一个参数,operator*有两个参数D)operator+有一个参数,operator*有一个参数(19)运算符重载是对已有的运算符赋予多重含义,下列描述中正确的是( C )。A)可以对基本类型(如int类型)的数据,重新定义“+”运算符的含义B)可以改变一个已有运算符的优先级和操作个数C)只能重载C+中已有的运算符,不能定义新运算符D)C+中已有的所有运算符都可以重载2.3改错题(1) #includeclass A public:int a1;pro

25、tected:int a2;private:int a3;class B:public A public: int b1; void fb(); protected:int b2;private:int b3;void B:fb() a1=10;a2=20;a3=30; b1=100; b2=100;b3=100;void main() A x; B y; x.a1=10;x.a2=20;x.a3=30; y.a1=100;y.a2=200 ;y.a3=300; y.b1=1000;y.b2=2000;y.b3=3000;本题的错误主要是数据成员的访问权限问题:基类的私有成员在派生类中不可访问

26、,如fb()函数中的a3=30;语句;类的私有和保护成员在类外不能访问,如main函数中的x.a2 =20;.a3=30; ,y.a2=200; ,y.a3=300; ,y.b2=2000;和y.b3=3000;语句。(2) #includeusing namespace std;class base private:void fun1()constcout”fun1”;protected:void fun2()constcout”fun2”;public: void fun3()constcout”fun3”;class derived:protected basepublic: void

27、fun4()constcout”fun4”;int main() derived obj;obj.fun1();obj.fun2(); obj.fun3(); obj.fun4(); return 0;本题的错误主要是成员函数的访问权限问题:由于派生类Derived是基类Base的保护派生类,所以基类中的私有成员变成派生类的不可访问成员,而基类的保护和公有成员则变成派生类的保护成员。对于类的不可访问和保护成员在类外是不能访问的,故main函数中的语句obj.funl();,obj.fun2(); 和obj.fun3(); 是错误的。2.4 读程序写结果题(1) #include class B public: B(int i) b=i-10; B()b=0; virtual void show()cout”b=”bendl;prot

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1