アフィリエイト広告を利用しています

広告

posted by fanblog

2017年12月25日

《その203》 抽象クラス(1)


 抽象クラス

 次のような、簡単なクラスを作るものとします。

  ※ '-' で描く横線クラス  … HorzLine
  ※ '|' で描く縦線クラス  … VertLine
  ※ '*' で描く四角形クラス … Rectangle


 これらはすべて、図形ですから、まず具体的な個々の形には踏み込まずに、抽象的な

   図形クラス … Shape

を作成することにします。
とは言っても、図形というだけでは、形に関してはまだ何もわかりません。ひとつ確かなことは、図形なら、"描く"作業が必ず必要なはずです。

そこで、次のようなクラスを作ってみます。draw関数は、"描く"ための関数(関数の中身は空っぽですが)です。

  class Shape {
  public:
    virtual void draw() = 0;
    // " = 0 " は純粋指定子
    //   この純粋指定子を付けて宣言された
    //   仮想関数は、純粋仮想関数となりま
    //   す。
  };


 【 抽象クラス

 クラス Shape には具体的な情報が含まれていないので、Shape型のオブジェクトを作ることは不可能です。
この Shape のようなクラスは抽象クラスと呼ばれ、具体的な図形クラスは、このクラスからの派生で実現するようにします。



 次のプログラムでは、抽象クラス Shape から派生した Rectangleクラスの長方形オブジェクト a, b を生成して、それぞれのオブジェクトの draw関数で長方形を描いています。


// ------------------------------------
#include <iostream>

// 抽象クラス Shape
class Shape {
public:
virtual ~Shape() = 0;
// 純粋仮想デストラクタ

virtual void draw() const = 0;
// 描画
// 純粋仮想関数
};

inline Shape::~Shape() { }

// 長方形クラス Rectangle
// (抽象クラス Shape から派生)

class Rectangle : public Shape {
int width; // 横幅
int height; // 高さ

public:
Rectangle(int w, int h)
: width(w), height(h) { }

void draw() const {
for (int i = 1; i <= height; i++) {
for (int j = 1; j <= width; j++)
std::cout << '*';
std::cout << '\n';
}
}
};

int main() {
Rectangle a(5, 3);
Rectangle b(3, 4);

Shape& ref = b;
// Rectangle& ref = b; としても結果は同じで
// すが、図形の種類が増えてきて、様々な
// 処理をしなけらばならなくなったときの
// 効率を考えれば、Shape& とすべきです。


a.draw();
std::cout << '\n';
ref.draw();
}
// ------------------------------------

f06_0001.png


新版 明解C 入門編 (明解シリーズ)

新品価格
¥2,916から
(2017/11/10 13:13時点)

新版 明解C 中級編 (明解シリーズ)

新品価格
¥2,916から
(2017/11/10 13:14時点)





この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバックURL
https://fanblogs.jp/tb/7127578
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック

 たまに、クリック お願いします m(_ _)m

 AA にほんブログ村 IT技術ブログ C/C++へ

こうすけ:メール kousuke_cpp@outlook.jp

【1】★★C++ 記事目次★★ ← 利用可能です。
・新版明解C++入門編 / 新版明解C++中級編
・その他 C++ 関連記事

【2】★★こうすけ@C#★★
・C# の初歩的な記事


検索
<< 2018年08月 >>
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
プロフィール
こうすけさんの画像
こうすけ

 たまに、クリック お願いします m(_ _)m

 AA にほんブログ村 IT技術ブログ C/C++へ

こうすけ:メール kousuke_cpp@outlook.jp

【1】★★C++ 記事目次★★ ← 利用可能です。
・新版明解C++入門編 / 新版明解C++中級編
・その他 C++ 関連記事

【2】★★こうすけ@C#★★
・C# の初歩的な記事


×

この広告は30日以上新しい記事の更新がないブログに表示されております。