北方民族大学程序设计语言课件第六章 继承.pptVIP

  • 0
  • 0
  • 约1.11万字
  • 约 51页
  • 2019-05-06 发布于广东
  • 举报

北方民族大学程序设计语言课件第六章 继承.ppt

(续) (续) 它的一般形式如下: 例 6-6 消除二义性 #includeiostream.h class A { public: int x; void fun(){cout″调用类A成员函数″endl;} }; class B { public: int x; void fun(){cout″调用类B成员函数″endl;} }; class C:public B,public A { public: void funC(){cout″调用类C成员函数″endl;} }; 例 6-8 int main() { C c; c.A::x=1; c.B::x=2; cout″Xa=″c.A::x″\tXb=″c.B::xendl; c.A::fun(); c.B::fun(); return 0; } Xa=1 Xb=2 调用类A成员函数 调用类B成员函数 由于存在二义性,所以一个类不能直接从同一类继承一次以上。 (续) 比如: class person {…}; class couple:public person,public person { ... }; 比如:上面的声明改写 class person { ... }; class couple { person husband,wife; ... }; 说明:根本就没有办法访问person类中的成员。 放弃继承的方式,而采用在类中使用对象成员的方法来解决。 比如:class A { public: int a; void fun(){} }; class B:public A { public: void funb(){} }; class C:public A { public: void func(){} }; 一个派生类由多个基类派生而来,而这多个基类中的部分或全部又有一个公共的基类,则这些具有公共基类的多个直接基类,从上一级公共基类中继承而来的成员就有相同的名称。 在派生类中访问这些公共基类成员时,就存在二义性问题。 class D:public B,public C { public: void fund(){} }; int main() { D d; d.fun(); //存在二义性 d.a=0; //存在二义性 return 0; } 消除公共基类二义性 #includeiostream.h class A { public: int a; void fun(){cout″类A成员函数被正确调用″endl;} }; A 类D的派生过程图 公共基类 A B C D 例 6-9 class B:public A { public: void display() { cout″Ab=″aendl; } }; class C:public A { public: void display() { cout″Ac=″aendl; } }; class D:public B,public C { public: void display() (续) * 6.1 继承与派生 6.2 单继承 6.2.1 公有派生 6.2.2 私有派生 6.2.3 保护派生 6.3 多继承 6.4 派生类的构造函数与析构函数 6.5 二义性问题 6.6 虚基类 6.7 赋值兼容原则 第 6章 继承 本章介绍继承的基本知识:单继承、多继承、公有派生、私有派生和保护派生;讨论派生类的构造函数、析构函数及多继承中的二义性问题;并详细讲解虚基类和赋值兼容原则。 可以把继承过程看成是从一个类派生出一个新类的过程。派生出来的新类称为派生类或子类;而被继承的类称作基类或父类。 一个基类可以派生出多个派生类,一个派生类也可以由多个基类派生而来。称从一个基类派生出一个

文档评论(0)

1亿VIP精品文档

相关文档