#pragma twice

KAB-studio > プログラミング > #pragma twice > 356 Version 17.01 クラスの継承

#pragma twice 356 Version 17.01 クラスの継承

前のページへ 表紙・目次へ 次のページへ

 Version 17.01
クラスの継承

この章では、前回までのクラスの使い方を踏まえて、さらに深い使い方に
ついて説明します
つまり、これまでの応用編ってこと?
ううん、確かにこれまでの知識は使うんだけど、それとは別に新しく説明
することの方が多いかな
新しい説明……
そう、特に【オブジェクト指向】っていう新しい考え方について説明しま

オブジェクト指向ってよく聞くよね
今のプログラミングでは必須だね。 C++ では言語の仕様上本格的に使う
ことは少ないんだけど
え、そうなの?
そのへんはこれから少しずつ説明していくから。まずは、その一番重要な
機能、【継承】について説明します
けいしょう……前にちょっとだけやったね
 Version 3.1 ( No.026 ) で説明したけど、もう一度ちゃんと説明する
ね。継承というのは【あるクラスのメンバ変数やメンバ関数を受け継いだ
クラスを作ることができる】という機能のことです
あるクラスの機能を受け継ぐ……
そう、たとえばこんな感じに

// Data.h

// CData クラス。
class CData
{
public:
    // データ格納用メンバ変数。
    int m_iData;
    // 出力用メンバ関数。
    void Output();
};

// CData クラスの派生クラス。
class CDerivedData : public CData
{
};


// Data.cpp
#include <Windows.h>
#include <stdio.h>

#include "Data.h"

// 出力用メンバ関数。
void CData::Output()
{
    // m_iData を出力します。
    char pch[256];
    sprintf( pch, "%d\n", m_iData );
    OutputDebugString( pch );
    // 100
}

この例では、 CData クラスから継承した CDerivedData クラスを作って
います

//                 →これがそう←
class CDerivedData : public CData
{
};

こんな感じに、クラスの右側に【: public クラス名】と書くと、この
【クラス名】のメンバ変数とメンバ関数を受け継ぐことができます
ってことは、この CDerivedData ってクラス、中身何もないけど CData 
クラスと同じ事ができるってこと?
そういうこと。使用例はこんな感じ

// Main.cpp
#include <Windows.h>
#include <stdio.h>

#include "Data.h"

int WINAPI WinMain
    ( HINSTANCE p_hInstance
    , HINSTANCE p_hPrevInstance
    , LPSTR p_pchCmdLine
    , int p_iCmdShow
    )
{
    // CData クラスを使用します。
    CData cData;
    cData.m_iData = 100;
    cData.Output();
    // 100

    // CDerivedData クラスを使用します。
    CDerivedData cDerivedData;
    cDerivedData.m_iData = 200;
    cDerivedData.Output();
    // 200

    return 0;
}

うわ! ホントだ、 CData クラスと CDerivedData が同じように使えて
る! CDerivedData クラスって中身空っぽなのに!
 CDerivedData クラスは CData クラスから継承しているから、 
CData クラスが持つ m_iData メンバ変数も Output() メンバ関数も使うこ
とができるんです
はー……
ここで、用語のまとめと、図の書き方について説明します
用語と図……図?
そう、図。まずはクラスを図で書くときの説明からしようか。クラスを
図で書くときには、以下のように書きます

┌────────┐
│クラス名        │
├────────┤
│メンバ変数      │
├────────┤
│メンバ関数      │
└────────┘

たとえばこの CData クラスを図に書くときには、以下のように書きます

┌────────┐
│CData           │
├────────┤
│m_iData         │
├────────┤
│Output()        │
└────────┘

なんだ、簡単じゃん
あと、継承関係がある場合には、以下のように書きます

┌────────┐
│CData           │
├────────┤
│m_iData         │
├────────┤
│Output()        │
└────────┘
         △
         │
┌────────┐
│CDerivedData    │
├────────┤
│                │
├────────┤
│                │
└────────┘

三角矢印ってこと?
そう、こんな感じで継承元と継承先クラスを書きます。そして、今言った
継承元と継承先だけど、実際には以下の用語を使用します

┌────────┐
│CData           │基本クラス、基底クラス、親クラス、スーパークラス
├────────┤
│m_iData         │
├────────┤
│Output()        │
└────────┘
         △
         │
┌────────┐
│CDerivedData    │派生クラス、子クラス、サブクラス
├────────┤
│                │
├────────┤
│                │
└────────┘

って、用語多すぎ!
基本的には以下の対のうちどれかを使う感じかな


基本クラス  基底クラス  親クラス  スーパークラス
    △          △         △         △
    │          │         │         │
派生クラス  派生クラス  子クラス  サブクラス


本によってどれを使うか違うから注意してね。僕はこの講座では

基本クラス
    △    
    │    
派生クラス

のペアを使用します
はーい
というわけで次回に続く!

/*
    Preview Next Story!
*/
いつも思うんだけど、最初は簡単だよね
そうだよ、簡単だから
それにいつも騙されるんだよねー
なにを人聞きの悪い
というわけで次回
< Version 17.02 派生クラスでのメンバの追加 >
につづく!
ひとつずつ進めて行くに従って難しくなるってゆーか
ひとつひとつは簡単だけど、まとめると大変ってそれだけの話
ホントにそれだけー?
 
del.icio.us 登録する
Yahoo!ブックマーク 詳細を表示 users
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
RSSに登録
del.icio.us 登録する
Yahoo!ブックマーク 詳細を表示 users
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
 
このページは、Visual C++ 6.0を用いた C++ 言語プログラミングの解説を行う#pragma twiceの一コンテンツです。
詳しい説明は#pragma twiceのトップページをご覧ください。