基类和派生类性质和作用.pptVIP

  • 51
  • 0
  • 约1.25万字
  • 约 56页
  • 2020-03-18 发布于广东
  • 举报
1.子类型 7.2.2 子类型和赋值兼容规则 当一个类型至少包含了另一个类型的所有行为,则称该类型是另一个类型的子类型。 例如,在公有继承下,派生类是基类的子类型。 如果类型A是类型B的子类型,则称类型A适应于类型B,这时用类型B对象的操作也可以用于类型A的对象。因此,可以说类型A的对象就是类型B的对象。 子类型的关系是不可逆的。 2. 类型适应 类型适应是指两种类型之间的关系 B类型适应A类型是指B类型的对象能够用于A类型的对象所能使用的场合。 子类型与类型适应是一致的。 当类型B是类型A的子类型时,则满足下述的赋值兼容规则。 ① B类的对象可以赋值给A类的对象。 ② B类的对象可以给A类对象引用赋值。 ③ B类的对象地址值可以给A类对象指针赋值。 通过基类对象名、指针、引用只能使用从基类继承的成员 3.赋值兼容规则 class B:public A { public: B() { b=0; } B(int i,int j):A(i),b(j) { } void Print() { coutb,; A::Print(); } private: int b; }; void fun(A a) { couta.Geta()+2,; a.Print(); } void main() { A a1(10),a2; B b(10,20); b.Print(); a2=b; a2.Print(); A *pa=new A(15); B *pb=new B(15,25); pa=pb; pa-Print(); fun(*pb); delete pa; } 例 分析下列程序的输出结果,熟悉赋值兼容规则在该程序中的使用。 #include iostream.h class A { public: A() { a=0; } A(int i) { a=i; } void Print() { coutaendl; } int Geta() { return a; } private: int a; }; 轮船类 水路两用车类 汽车类 7.3 多继承 7.3.1 多继承的概念 多继承派生类构造函数格式如下: 派生类构造函数名 (总参数表): 基类名1 (参数表1), 基类名2 (参数表2),… { 派生类构造函数体 } 7.3.1 多继承的构造函数和析构函数 在多重继承派生类构造函数中,先执行基类的构造函数。多个基类构造函数的执行顺序取决于定义派生类时规定的先后顺序,与派生类的成员初始化列表中顺序无关。 派生类构造函数中可以隐含着直接基类的默认构造函数。 多重继承派生类的析构函数中隐含着直接基类的析构函数,但其执行顺序与构造函数相反。 7.3.1 多继承的构造函数和析构函数 class B { public: B(int i) { b=i; coutConstructor called.B\n; } ~B() { coutDestructor called.B\n; } void Print() { coutbendl; } private: int b; }; 例 熟悉多重继承派生类构造函数和析构函数的用法。 #include iostream.h class A { public: A(int i) { a=i; coutConstructor called.A\n; } ~A()

文档评论(0)

1亿VIP精品文档

相关文档