- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
程序设计教程(机械工业出版社)课后习题答案 第8章 继承――派生类
第8章 继承――派生类
在C++中,protected类成员访问控制有什么作用?
答:C++中引进protected成员保护控制,缓解了数据封装与继承的矛盾。在基类中声明为protected的成员可以被派生类使用,但不能被基类的实例用户使用,这样能够对修改基类的内部实现所造成的影响范围(只影响子类)进行控制。protected成员保护控制的引进使得类有两种接口:与实例用户的接口和与派生类用户的接口。
在C++中,三种继承方式各有什么作用?
答:类的继承方式决定了派生类的对象和派生类的派生类对基类成员的访问限制。public继承方式使得基类的public成员可以被派生类的对象访问,它可以实现类之间的子类型关系;protected继承使得基类的public成员不能被派生类的对象访问,但可以被派生类的派生类访问;private继承使得基类的public成员既不能被派生类的对象访问,也不能被派生类的派生类访问。protected和private继承主要用于实现上的继承,即纯粹为了代码复用。
在多继承中,什么情况下会出现二义性?怎样消除二义性?
答:在多继承中会出现两个问题:名冲突和重复继承。在多继承中,当多个基类中包含同名的成员时,它们在派生类中就会出现名冲突问题;在多继承中,如果直接基类有公共的基类,就会出现重复继承,这样,公共基类中的数据成员在多继承的派生类中就有多个拷贝。在C++中,解决名冲突的方法是用基类名受限;解决重复继承问题的手段是采用虚基类。
写出下面程序的运行结果:
#include iostream
using namespace std;
class A
{ int m;
public:
A() { cout in As default constructor\n; }
A(const A) { cout in As copy constructor\n; }
~A() { cout in As destructor\n; }
};
class B
{ int x,y;
public:
B() { cout in Bs default constructor\n; }
B(const B) { cout in Bs copy constructor\n; }
~B() { cout in Bs destructor\n; }
};
class C: public B
{ int z;
A a;
public:
C() { cout in Cs default constructor\n; }
C(const C) { cout in Cs copy constructor\n; }
~C() { cout in Cs destructor\n; }
};
void func1(C x)
{ cout In func1\n;
}
void func2(C x)
{ cout In func2\n;
}
int main()
{ cout ------Section 1------\n;
C c;
cout ------Section 2------\n;
func1(c);
cout ------Section 3------\n;
func2(c);
cout ------Section 4------\n;
return 0;
}
答:------Section 1------
in Bs default constructor
in As default constructor
in Cs default constructor
------Section 2------
in Bs default constructor
in As default constructor
in Cs copy constructor
In func1
in Cs destructor
in As destructor
in Bs destructor
------Section 3------
In func2
------Section 4------
in Cs destructor
in As destructor
in Bs destructor
写出下面程序的运行结果:
#include iostream
using namespace std;
class A
{ int x,y;
public:
A() { cout in As default constructor\n; f(); }
A(const A) { cout in As copy constructor\n; f(); }
文档评论(0)