C++习题答案-4.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文档。上传文档
查看更多
C习题答案-4

第4章:继承与派生类 [4_1] 答:类的继承方式有public(公有继承)、protected(保护继承)和private(私有继承)3种,不同的继承方式导致原来具有不同访问属性的基类成员在派生类中的访问属性也有所不同。 (1)基类中的私有成员 无论哪种继承方式,基类中的私有成员不允许派生类继承,即在派生类中是不可直接访问的。 (2)基类中的公有成员 当类的继承方式为公有继承时,基类中的所有公有成员在派生类中仍以公有成员的身份出现; 当类的继承方式为私有继承时,基类中的所有公有成员在派生类中都以私有成员的身份出现; 当类的继承方式为保护继承时,基类中的所有公有成员在派生类中都是以保护成员的身份出现。 (3)基类中的保护成员 当类的继承方式为公有继承时,基类中的所有保护成员在派生类中仍以保护成员的身份出现; 当类的继承方式为私有继承时,基类中的所有保护成员在派生类中都是以私有成员的身份出现: 当类的继承方式为保护继承时,基类中的所有保护成员在派生类中仍以保护成员的身份出现。 [4_2] 答:派生类不能直接访问基类的私有成员,但是可以通过基类提供的公有成员函数间接地访问基类的私有成员。 [4_3] 答:保护成员可以被派生类的成员函数访问,但是对于外界是隐藏起来的,外部函数不能访问它。因此,为了便于派生类的访问,可以将基类私有成员中需要提供给派生类访问的成员定义为保护成员。C++规定,派生类对于保护成员的继承与公有成员的继承很相似,也分为两种情况:若为公有派生,则基类中的保护成员在派生类中也为保护成员;若为私有派生,则基类中的保护成员在派生类中成为私有成员。 [4_4] 答:通常情况下,当创建派生类对象时,首先执行基类的构造函数,随后再执行派生类的构造函数;当撤消派生类对象时,则先执行派生类的析构函数,随后再执行基类的析构函数。 [4_5] 答:当基类的构造函数没有参数或没有显示定义构造函数时,派生类可以不向基类传递参数,甚至可以不定义构造函数。当基类含有带参数的构造函数时,派生类必须定义构造函数,以提供把参数传递给基类构造函数的途径。 派生类构造函数的一般格式如下: 派生类构造函数名(参数总表):基类构造函数名(参数表) { 派生类新增数据成员的初始化语句 } 其中基类构造函数的参数,通常来源于派生类构造函数的参数表,也可以用常数值。由于析构函数是不带参数的,在派生类中是否定义析构函数与它所属的基类无关,基类的析构函数不会因为派生类没有析构函数而得不到执行,它们各自是独立的。 [4_6] 答:当一个派生类具有多个基类时,这种派生方法称为多继承。多继承构造函数的执行顺序与单继承构造函数的执行顺序相同,也是遵循先执行基类的构造函数,再执行对象成员的构造函数,最后执行派生类构造函数的原则。在多个基类之间则严格按照派生类声明时从左到右的顺序来排列先后。而析构函数的执行顺序刚好与构造函数的执行顺序相反。 [4_7]在类的派生中为何要引入虚基类?虚基类构造函数的调用顺序是如何规定的? 答:当引用派生类的成员时,首先在派生类自身的作用域中寻找这个成员,如果没有找到,则到它的基类中寻找。如果一个派生类是从多个基类派生来的,而这些基类又有一个共同的基类,则在这个派生类中访问这个共同的基类中的成员时,可能会产生二义性。为了解决这种二义性,C++引入了虚基类的概念。 虚基类构造函数的调用顺序是: (1)若同一层次中包含多个虚基类,这些虚基类的构造函数按它们的说明的先后次序调用。 (2)若虚基类由非虚基类派生而来,则仍然先调用基类构造函数,再调用派生类的构造函数。 (3)若同一层次中同时包含虚基类和非虚基类,应先调用虚基类的构造函数,再调用非虚基类的构造函数,最后调用派生类构造函数。 [4_8] A [4_9] C [4_10] C [4_11] B [4_12] 运行结果是: Constructor B2. Constructor B1. Constructor A. 3 2 1 [4_13]运行结果是: 主食=bread 副食=steak [4_14]运行结果是: 0,0,0 0,1,0 3,6,9 [4_15] 运行结果是: Constructor B2.2 Constructor B1.1 Constructor B3.3 Constructor A.4 1 2 4,3 [4_16] 运行结果是: 4 [4_17] 运行结果是: (1,2) 5,6 (6,9) [4_18] 运行结果是: class base1 class base2 class level2 class base2 class level1 class toplevel [4_19] 修改后的程序如下: #include iostream using namespa

文档评论(0)

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

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

1亿VIP精品文档

相关文档