制作时间2005年度4月改.pptVIP

  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文档。上传文档
查看更多
公有继承 公有继承时,派生类的对象只可访问基类中的公有成员,不能访问其它成员。派生类的成员函数可以访问基类中的公有成员和保护成员,不可访问其私有成员。 2、私有继承 私有继承时,基类的成员只能由直接派生类访问,而无法再往下继承。 2、私有继承 class N:public M { public: N(){n=0;} N(int i,int j,int k); void print( ){M::print();coutnendl;} ~N(){cout“N’s destructor called.\n”;} private: int n; }; N::N(int i,int j,int k):M(i,j),n(k) { } void main( ) { N n1(5,6,7),n2(-2,-3,-4); n1.print(); n2.print(); } 结果为: 5,6,7 -2,-3,-4 N’s destructor called. M’s destructor called. N’s destructor called. M’s destructor called. 子类型化和类型适应 有一个特定的类型S,当且仅当它至少提供了类型T的行为,则称类型S是类型T的子类型。 子类型是类型间的一般和特殊的关系。 在继承中,公有继承可以实现子类型。 如: class A {public: void print() const {cout“ok!”;}}; class B:public A {public: void f() {cout“No!”;} }; void f1(const A r) {r.print(); } void main() { B b; f1(b);} 结果为: ok! 1、子类型化 对类A的对象操作的函数,也就可对类A的子类(类B)的对象进行操作 指两种类型之间的关系。如:派生类适应于基类。即派生类的对象可以用于基类对象所能使用的场合。 子类型化与类型适应是一致的。 子类型的重要性是能减轻编程负担。一个函数可以用于某类型的对象,也就可用于该类型的各个子类型的对象,不必进行函数重载。 2、类型适应 7.3 多继承 多继承的概念 多继承的构造函数 二义性问题 多继承的概念 是指派生类具有多个基类,派生类与每个基类之间的关系仍可看作是一个单继承。 定义格式在开始已经给出。 如: class A {…}; class B {…}; class C :public A,public B {…}; 根据继承的规定,派生类C的成员包含了基类A中成员和基类B中成员及该类本身的成员。 多继承的构造函数 一般格式为: 派生类名(总参数表): 基类名1(参数表1), 基类名1(参数表1),… 子对象名(参数表n+1) { 派生类构造函数体 }; 它必须同时负责该派生类所有基类构造函数的调用。同时,派生类的参数个数必须包含完成所有基类初始化所需的参数个数。 派生类构造函数的调用顺序是: 先执行所有基类的构造函数 再执行子对象类的构造函数(若有) 再执行派生类本身的构造函数 注意: 同一层次的各基类构造函数的执行顺序取决于定义派生类时所指定的各基类顺序,与派生类构造函数中所定义的成员初始化表的各项顺序无关。 例: #include iostream.h class B1 { public: B1(int I) {b1=I; cout“constructor B1.”Iendl; } void print(){coutb1endl;} private: int b1; }; class B2 { public: B2(int I) {b2=I; cout“constructor B2.”Iendl; } void print(){coutb2endl;} private: int b2; }; class B3 { public: B3(int I) {b3=I; cout“constructor B3.”Iendl; } int getb3{return b3;} private: int b3; }; 定义基类B1 定义基类B2 定义基类B3 class A:

文档评论(0)

189****6140 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档