Top > C++言語 > 継承(活用編)


再利用としての継承

  • 継承の目的は、プログラミングを効率化すること
例えば...
A さんが MyClass クラスを作って、B さんにプレゼントしたとする。
B さんは新たに YourClass クラスを MyClass クラスを継承して定義すれば、
無条件に MyClass クラスのメンバを再利用できます
  • オブジェクト指向プログラミングは、大規模なプログラムの作成に適したスタイル
例えば...
A さんはクラスを作る人、B さんはクラスを使う人といった具合に分担できる
  • オブジェクト指向設計の基本は、プログラム全体を複数のクラスに分割すること


汎化と継承

  • 必要と思われるクラスを洗い出すことが、オブジェクト指向設計の第一歩となる
例えば...
  • 車の管理システムを例とし、下記のように OpenCar クラス、SuperCar クラス、F1Car クラスを考える
    すべてを展開すべてを収束
      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
    
     
    -
    |
    |
    |
    |
    !
     
     
    -
    |
    |
    |
    |
    !
     
     
    -
    |
    |
    |
    |
    !
    
    class OpenCar
    {
    public:
      int number;
      double gas;
      int haikiryo;
    };
     
    class SuperCar
    {
    public:
      int number;
      double gas;
      int maxSpeed;
    };
     
    class F1Car
    {
    public:
      int number;
      double gas;
      int winCount;
    };

  • どのクラスも number, bas という同じメンバ変数を持っている
  • 同じコードを何度も記述することになるので、効率的ではない
  • 共通のメンバだけを纏めた BaseCar クラスを定義する

    複数のクラスに共通するメンバを1つのクラスに纏めることを汎化という

  • 汎化によって作成された BaseCar クラスを基本クラスとして定義し、
    BaseCar クラスを継承して、OpenCar クラス、SuperCar クラス、F1Car クラスを派生クラスとして定義する
  • 共通するメンバ変数を定義する回数は 1 回で済み、効率的
  • オブジェクト指向設計での汎化は、プログラミング時には継承となる
    すべてを展開すべてを収束
      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
     24
    
     
    -
    |
    |
    |
    !
     
     
    -
    |
    |
    !
     
     
    -
    |
    |
    !
     
     
    -
    |
    |
    !
    
    class BaseCar
    {
    public:
      int number;
      double gas;
    };
     
    class OpenCar : public BaseCar
    {
    public:
      int haikiryo;
    };
     
    class SuperCar : public BaseCar
    {
    public:
      int maxSpeed;
    };
     
    class F1Car : public BaseCar
    {
    public:
      int winCount;
    };


参考


リロード   凍結解除 コピー 名前変更   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: Mon, 03 Jun 2019 14:37:49 UTC (686d)