典型例题(第七篇).docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
例题1.请将下列类定义补充完整。 #includeiostream.h class base{ public: void fun( ) { coutbase::funendl; } }; class derived : public base { public: void fun( ) { ___________________//显式调用基类的fun函数 coutderived::funendl; } }; 解答: 本题考查在继承过程中,如果基类与子类有同名成员时,如何完成各自的引用。如果基类与子类有同名成员时,子类的同名成员会屏蔽基类的同名成员,所以要在自类中引用该成员则需要使用作用域区分符确定要调用谁的成员。因此,本题答案为:base::fun(); 例题2.有如下程序: #includeiostream.h class base { public: void show(){coutbase:public memberendl;} protected: void show1(){coutbase:protected memberendl;} private: void show2(){coutbase:private memberendl;} }; class derived:protected base { public: void fn() { show1();//① show2();//② } }; void main() { derived a; a.fn(); a.show(); //③ a.show1(); //④ show(); //⑤ } 有语法错误的语句是( )。 (a)①②③④ (b)②③④⑤ (c)①③④⑤ (d)①②④⑤ 解答: 本题主要考查各种派生中派生类的访问权限问题。这里derived采用保护继承的方式继承了base类。对于保护继承其访问权限有如下规则: ①继承后基类的公有成员和保护成员在派生类中均为保护成员,基类的私有成员在派生类中仍为私有成员。 ②在派生类中可以直接访问基类的公有成员和保护成员,但对于私有成员的访问只能通过基类的非私有成员函数间接访问。 ③在基类和派生类定义以外对基类的所有成员均无法直接访问也无法通过派生类的对象间接访问。 对于语句①②是在派生类内部访问基类的保护成员函数和私有成员函数,无论哪种继承方式,基类的私有成员都不能被基类定义以外的任何地方直接访问,所以语句②是错误用法;而在派生类定义的内部访问基类的公有和保护成员是允许的,所以语句①正确。对于语句③④是在类定义以外通过子类的对象访问基类的公有成员函数和保护成员函数,因为保护继承后基类的公有和保护成员在子类中均为保护成员,所以在类外通过对象不能对其直接进行访问,所以③④语句是错误的用法。语句⑤执行后找不到相应的函数定义,因此是错误的。答案为:b 例题3.下列说法正确的是( )。 基类的构造函数和析构函数不能被派生类继承。 在派生类中用户必须自定义派生类构造函数。 析构函数与构造函数被调用的顺序是一致的。 在多重继承中,多个基类的构造函数的调用顺序由定义派生类构造函数时指定的初始化表中的次序决定。 解答: 如果基类没有定义构造函数,派生类也可以不定义构造函数,全都采用缺省的构造函数。如果基类定义了带有形参表的构造函数,派生类就必须定义构造函数,保证在基类进行初始化时能获得所需的数据。析构函数与构造函数被调用的顺序正好相反。在多重继承中,多个基类的构造函数的调用顺序由在定义派生类时基类的声明顺序决定。答案为:a 例题4.有如下程序: #include iostream.h class A { public: A( ) { cout A; } }; class B { public: B( ) { cout B; } }; class C : public A { B b; public: C( ) { cout C; } }; int main( ) { C obj; return 0; } 执行后的输出结果是( )。 (a)CBA (b)BAC (c)ACB (d)ABC 解答: 本题主要考查继承中构造函数的调用顺序。对于构造函数,先执行基类的,再执行对象成员的,最后执行派生类的。本程序中在主函数里创建C类对象obj,则首先执行类C的基类A的构造函数输出A,然后调用其对象成员b所在的B类的构造函数输出B,最后执行类C自己的构造函数输出C。答案为:d 例题5.有如下程序: #include iostream.h class base1 {public:

文档评论(0)

0520 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档