新・明解 C++で学ぶオブジェクト指向プログラミング 第7章 抽象クラス

新・明解C++で学ぶオブジェクト指向プログラミング

柴田 望洋 SBクリエイティブ 2018年09月18日頃
売り上げランキング :

by ヨメレバ

第7章 抽象クラス

*バラバラに定義されたクラスに、同一のメンバー関数があっても、それらは無関係。
多相性を有効活用するために。

*点クラスと、長方形クラスをまとめる、クラス Shape は具体的な図形はもたず、抽象的な概念。

class Shape {
virtual void draw() = 0;
};

純粋指定子=0 で定義することで、純粋可能関数となる。つまり、ここでは関数本体を定義しないので、ここから派生したクラスで定義すべきことを示す。下位クラスでのオーバーライドを強要する。

*純粋仮想関数をひとつでも持つクラスは、抽象クラスである。

*抽象クラス型のオブジェクトは生成できない。ポインタはOK。

Shape* a[2];
a[0] = new Point;
a[1] = new Rectangle(7,3);

*配列a の要素型は Shape* なので、a[0]やa[1]は、Shape から派生したクラスのオブジェクトを指せる。

*抽象クラスは、実体が作れない不完全なクラスではあるものの、自身を含め、派生したクラスに対して、血縁関係をもたせる役割を果たす。

*下記のようなケースを、オーバーライドする関数の返却値型が同一でなくても、共変的であればOK。
class Shape {
     public:
          virtual Shape* clone() const =0;
}
class Point: public Shape {
     public:
          Point* clone() const {
               return new Point;
          }
}

タイトルとURLをコピーしました