- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C继承与派生
第4章继承与派生一、简答题1. 有以下程序结构,请分析访问属性。class A //A为基类{public: void func1( ); int i;protected: void func2( ); int j;private:int k;} ;class B: public A //B为A的公用派生类{public : void func3( ) ;protected: int m;private :int n;};class C: public B // C为B的公用派生类{public:void func4( );private:int p;};int main( ){ A a; //a是基类A的对象 B b; //b是派生类B的对象C c; //c是派生类C的对象return 0; }问:(1)在main函数中能否用b.i,b.j 和b.k 访问派生类B对象b中基类A的成员?(2)派生类B中的成员函数能否调用基类A中的成员函数func1和func2?(3)派生类B中的成员函数能否访问基类A中的数据成员i,j,k?(4)能否在main函数中用c.i,c.j,c.k,c.m,c.n,c.p访问基类A的成员i,j,k,派生类B的成员m,n,以及派生类C的成员p?(5)能否在main函数中用c. func1( ),c. func2( ),c. func3( )和c. func4( )调用func1,func2,func3,func4成员函数?(6)派生类C的成员函数func4能否调用基类A中的成员函数func1,func2和派生类B中的成员函数func3?【答案要点】各成员在各类的范围内的访问权限如下表:类的范围func1ifunc2jkfunc3mnfunc4p基类A公用公用保护保护私有公用派生类B公用公用保护保护不可访问公用保护私有公用派生类C公用公用保护保护不可访问公用保护不可访问公用私有(1)在main 函数中能用b.i访问派生类B对象b中基类A的成员i,因为它在派生类B中是公用数据成员。不能用b.j访问派生类B对象b中基类A的成员j,因为它在派生类B中是保护数据成员,不能被类外访问。不能用b.k访问派生类B对象b中基类A的成员k,因为它是基类A的私用数据成员,只有基类A的成员函数可以访问,不能被类外访问。(2)派生类B中的成员函数能调用基类A中的成员函数func1和func2,因为func1、func2在派生类B中是公用成员和保护成员,可以被派生类的成员函数访问。(3)派生类B中的成员函数能访问基类A中的数据成员i、j,因为i、j在派生类B中是公用成员和保护成员,可以被派生类的成员函数访问。派生类B中的成员函数不能访问基类A中的数据成员k,因为它在派生类B中是不可访问的成员。(4)能在main 函数中用c.i访问基类A的成员i,不能用c.j、c.k访问基类A的成员j、k,因为它们在派生类C中是保护成员和私有成员,不能被类外访问。也不能用c.m、c.n访问派生类B的成员m、n,因为它们在派生类C中也是保护成员和私有成员,不能被类外访问。也不能用c.p访问派生类C中的私用成员p。(5)能在main函数中用c.func1()、c. func3()和c. func4()调用func1、func3、func4成员函数,因为它们在派生类C中是公用成员函数,可以在类外被访问。不能在main函数中用c.func2()调用func2成员函数,因为它在派生类C中是保护成员函数,不能在类外被访问。(6)派生类C的成员函数func4能调用基类A中的成员函数func1、func2和派生类中的成员函数func3,因为func1、func3在派生类C中是公用成员函数,func2在派生类C中是保护成员函数,都可以被派生类C的成员函数调用。2. 已给商品类及其多层的派生类。以商品类为基类。第一层派生出服装类、家电类、车辆类。第二层派生出衬衣类、外衣类、帽子类、鞋子类;空调类、电视类、音响类;自行车类、轿车类、摩托车类。请给出商品类及其多层派生类的基本属性和派生过程中增加的属性。【答案要点】按题意没有操作,所以只列出各个类的数据成员,也不再在main函数中对各类进行测试。#includeiostreamusing namespace std;class Commodity{double price; //价格char name[20]; //商品名char manufacturer[2
文档评论(0)