继承

2017-05-06  本文已影响0人  ZayAlan

面向对象的复用

复用类A的功能 以继承方式复用类A

继承的语法

格式:

class 派生类名: 继承方式  基类名称, (继承列表)
{
        ......
}

继承的存储方式

B类继承A类
则B类的储存情况为

B类的实际储存情况

派生类中成员的访问控制

各继承方式下各类成员的访问情况变化

image.png

派生类的构造和析构

派生类中的成员函数

class A
{
public:
        void F();
        void F(int n);
        void G();
        virtual void H();
private:
        void K();
        int data;
};
class B:public A
{
public:
        void BF(){}        //newdefine的函数
        void G(){}          //redefine了基类的G()
        void F(int n, int m)    //定义了与基类同名的函数F,于是overwrite了基类的F
        {
                F();                    //故此时overload基类的F,以下均非法,F都被hide
                F(n);
        }
}

复用方式的选择

class Car
{...};
class MTCar : public Car
{...};
class ATCar : public Car
{...};
class My{
public:
My(Car&c)                  //此中的Car类可以是MTCar对象,也可以是ATCar对象或Car
        {pCar=&c;}
void Func(Car & c)
        {c.Run();}
private:
Car * pCar;
};
int main()
{
      Car car;
      MTCar mtcar;
      ATCar atcar;
      My mycar(atcar);
      mycar.Func(mtcar);
      ...
}

继承表示的逻辑关系

  1. public继承:
    “is a”或“is a kind of”关系
is a或is a kind of关系

子类是具有父类的所有行为,并加以细化。继承使用最多的便是public继承方式。

  1. private继承:
private继承
  1. protected继承:
    意义不大
protected

组合和继承的选择

优先选择组合,而不是继承
在需要派生新的子类的情况下,才应采用公有继承

用组合取代private继承
上一篇 下一篇

猜你喜欢

热点阅读