下载此文档

第五章作业答案.docx


文档分类:高等教育 | 页数:约11页 举报非法文档有奖
1/11
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/11 下载此文档
文档列表 文档介绍
DDB问答题1、理解继承和派生的定义。什么叫单继承?什么叫多继承?答:继承是指在定义一个新类时,首先把一个或多个已有类的功能全部包含进来,然后再给出新功能的定义或对已有类的功能进行重新定义。在C++中被继承的类称为基类;从其他类继承的类成为派生类。C++支持单继承和多继承。单继承是指一个类只能有一个直接基类;多继承是指一个类是从多个基类继承而来。2、公有继承、保护继承、私有继承基类成员的属性在派生类中分别会发生什么样的变化?试分析之答:公有继承时,基类的公有成员和保护成员在派生类中依然是公有成员和保护成员,基类的私有成员不可见;在保护继承时,基类的公有成员和保护成员在派生类中都变为保护成员,基类的私有成员在派生类中不可见;私有继承时,基类的公有成员和保护成员在派生类中都变为私有成员,基类的私有成员在派生类中不可见。3、为什么要设置虚基类?在C++中如何说明虚基类?当创建一个其间接基类为虚基类的派生类的对象时,构造函数与析构函数的调用次序分别是什么?答:共同祖先基类多重拷贝容易引发同名冲突:在多层派生类中,派生类有多个直接或间接的基类,其中有一个基类是其余某些基类的共同祖先,在访问派生类的某些成员时,会引发同名冲突问题,所以要设置虚基类,设置虚基类保证虚基类的构造函数至多被调用一次;虚基类的说明:虚基类的定义通过关键字virtual实现,语法形式为:class派生类名:继承方式virtual基类名或者class派生类名:virtual继承方式基类名。构造函数和析构函数的调用次序为:(1)所有虚基类的构造函数(按定义顺序);(2)所有直接基类的构造函数(按定义顺序);(3)所有对象成员的构造函数(按定义顺序)(4)派生类自己的构造函数析构函数的调用次序与之完全相反。4、派生类对象在访问基类成员时,基类成员的访问属性会受到哪些因素的影响?答:(1)对于公有继承,只有基类的公有成员可以被“派生类对象”访问,其他(保护和私有)成员不能被访问。(2)对于私有继承和保护继承,基类中所有成员都不能被“派生类对象”访问。读程序按要求作答运行下列程序,分析并写出创建obj对象时构造函数的执行步骤,解释输出结果中的ConstructingA,n=5是执行到哪个构造函数时输出的?#include<iostream>#include<cmath>usingnamespacestd;classA{ intn;public: A(intx) { n=x; cout<<"ConstructingA,n="<<n<<endl; } ~A() {cout<<"DestructingA,n="<<n<<endl; }};classB{ intn; Aa;public: B(intx,inty):a(x) { n=y; cout<<"ConstructingB,n="<<n<<endl; } ~B() {cout<<"DestructingB,n="<<n<<endl; }};classC{ intn; Aa; Bb;public: C(intx,inty,intz):a(x*2),b(x,y) { n=z; cout<<"ConstructingC,n="<<n<<endl; } ~C() {cout<<"DestructingC,n="<<n<<endl; }};intmain(){ Cobj(5,6,7); return0;}答:程序中构造函数的调用次序为:按照定义的顺序,先调用C类中对像成员A的构造函数,再调用B类中对象成员A的构造函数,然后调用构造函数B,最后调用构造函数C;ConstructingA,n=5是调用B类的对象成员A的构造函数输出的。找出下面程序中的错误,并进行改正,写出正确的输出结果。(1)#include<iostream>usingnamespacestd;classbase{ intx;public: voidsetx(intn) {x=n;} voidshowx() {cout<<x<<endl;}};classderived:base{ inty;public: voidsetxy(intn,intm) { setx(n); y=m; } voidshowxy() { cout<<x; showx(); cout<<y<<endl; }};main(){ derivedobj; (10); (); (20,30); (); return0;}(2)#include<iostream>usingnamespacestd;classX{ inta;public: voidsetX(intx) {a=x;} voidshowx() {cout<<"a="<<a<<e

第五章作业答案 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数11
  • 收藏数0 收藏
  • 顶次数0
  • 上传人rdwiirh
  • 文件大小21 KB
  • 时间2019-09-19