#pragma twice

KAB-studio > プログラミング > #pragma twice > 328 Version 16.01 クラスを作ってみよう!

#pragma twice 328 Version 16.01 クラスを作ってみよう!

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

 Version 16.01
クラスを作ってみよう!

さて、 Version 16 ではクラスについてちゃんと説明していきます
これまでにもなんとなく教わってきたけど、ちゃんとって初めてかも?
 Version 11.16 ( No.216 ) とかに説明したけど、あの時は CString を
理解するための解説だったから、またちょっと違うかも
うん、あのときもちゃんとは教わってない気がする
というわけで、一からちゃんと説明します
はーい
まず Version 8.01 ( No.143 ) で作った一番シンプルなプロジェクトを
用意します
ほい。プロジェクト名は?
普通に ClassTest で
んで【Win32 Application】にして、【OK】ボタンっと。プロジェクトは
【空のプロジェクト】でいいんだよね
うんそれで。プロジェクトができたら、メニューの【ファイル】-
【新規作成】で【ファイル】ページの【C++ ソースファイル】を選んで、
【ファイル名】を Main.cpp にして
なんだ、 BuildTest と同じじゃん
ま、そうなんだけどね。さらに同じく、 Main.cpp のプログラムはこんな
感じに

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

int WINAPI WinMain
    ( HINSTANCE p_hInstance
    , HINSTANCE p_hPrevInstance
    , LPSTR p_pchCmdLine
    , int p_iCmdShow
    )
{
    OutputDebugString( "テスト。\n" );

    return 0;
}

ビルドして実行、ん、〈テスト。〉って出たよ。確認おけー
それでは、まずは一番単純なクラスを作ります
ほい
メニューの【ファイル】-【新規作成】で、【ファイル】ページの
【C/C++ ヘッダー ファイル】を選んで、【ファイル名】を Data.h にし

 Data.h っと。ファイルできたよ
そうしたら以下のように書いて

// Data.h

// CDataクラス。
class CData
{
};

お、クラスだ
まったく何の機能もないクラスです。クラスは、ヘッダーファイルで以下
のように定義します

class クラス名
{
// クラスの中身
};

最後のセミコロンを忘れないようにね
質問!
はい火美ちゃん
クラス名って〈Cなんたら〉じゃなきゃいけないの?
いけなくはないよ。そういうルールじゃないクラス名も多いし。 MFC が
この命名規則だから、っていうのが理由かな
 MFC ……
実際、この辺はそこまで合わせる必要もないのかもしれないけどね。
ヘッダーファイル名も MFC に合わせて、 C を取ったものにしてるし
ま、慣れてるからいいんだけどね
さて、クラスは【型】なので、このクラスの変数を宣言することができま
す。そこで、 Main.cpp の方を以下のように書き換えてください

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

#include "Data.h"

int WINAPI WinMain
    ( HINSTANCE p_hInstance
    , HINSTANCE p_hPrevInstance
    , LPSTR p_pchCmdLine
    , int p_iCmdShow
    )
{
    // CDataクラスの変数を宣言します。
    CData cData;

    return 0;
}

 CData クラスを使うためには、まずそのクラスの定義がある
ヘッダーファイルをインクルードします

#include "Data.h"

インクルードしたら、もう変数の型として使えるので、変数宣言をしてみ
ます

    // CDataクラスの変数を宣言します。
    CData cData;

フツーの変数ね
でもこれが基本。クラスはあくまで〈変数の型〉。変数を作るのが目的だ
からね
質問!
はい火美ちゃん
ヘッダーファイルでインクルードするんなら、 WinMain() の上に CData 
のがあってもいいんだよね。こんな感じに

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

// CDataクラス。
class CData
{
};

int WINAPI WinMain
    ( HINSTANCE p_hInstance
    , HINSTANCE p_hPrevInstance
    , LPSTR p_pchCmdLine
    , int p_iCmdShow
    )
{
    // CDataクラスの変数を宣言します。
    CData cData;

    return 0;
}

そうなんだけどね。このあたりはルールかな。クラス毎にファイルを分け
た方が分かりやすいしね
ま、そりゃそうね
でもこういうことは大事かな。そこを押さえておかないと、クラスは
ヘッダーファイルに置かなきゃいけない、って思ったりするから
それはそれで分かりやすそうだけど……
プリコンパイル済みヘッダーファイルとか、相互インクルードの問題を
解決しなきゃいけないからちゃんと理解してないとだめ
ぶー
さて、最後に次回の準備をします。 CData クラスに m_iValue 
メンバ変数を宣言します

// Data.h

// CDataクラス。
class CData
{
public:
    int m_iValue;
};

メンバ変数は、クラスの中に入っている変数です。使用例はこんな感じ

// 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;
    // m_iValueに値を入れます。
    cData.m_iValue = 100;
    // 出力します。
    char pch[256];
    sprintf( pch, "%d\n", cData.m_iValue );
    OutputDebugString( pch );
    // 100

    return 0;
}

メンバ変数は、〈変数.メンバ変数〉という形でアクセスできます

    // m_iValueに値を入れます。
    cData.m_iValue = 100;

 cData の中に m_iValue が入ってる、って感じでいいんだよね
そういうこと。 int 型とかだとサイズが決まってるけど、クラスは
メンバ変数のサイズだけ大きくなる、って考えるのがいいかな
見た目とはウラハラに、クラスっておっきいってことね

/*
    Preview Next Story!
*/
この辺はなんとなく分かってたとこかな
でもそれじゃいけないんだよね
どゆこと?
ちゃんと細かい所まで知らないと、プログラムは組めないよ
何となくじゃダメ?
というわけで次回
< Version 16.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のトップページをご覧ください。