[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
となるのですね。
さて、本日の講座は『継承』についてです。
第4回 C++講座 『継承』
どうも、中原です。
SPI対策の日程は大体決まったのですが、まだラボの使用許可を取っていない為、正確な日時は決まってません。
一応、今週は説明会などで忙しいため、第1回は7日を予定しております。
2、3日の間に、しっかりと告知いたしますので、もう暫くお待ち下さい。
さて、来年2年生になる方々、そして現2年生の方々。
C++言語というものを使っていますか?
もうゲーム業界では必須の言語です。
これを使えないと、業界には入れないくらいに…。
とはいっても、ゲームをしっかり作っているならば、勿論大丈夫ですが。
ほんとうに 『しっかり』 作っている場合ですよ!
今1年生の方々は、この春休みにC++言語を勉強して、是非今年の製作ではC++でゲームを作っていきましょう。
今回は、本を読むのがいやだとか、買うお金がないという方たちのために、とても簡単にC++の説明をしていきたいと思います。
一応春から、新2年生に向けて、ラボでC++講座を開きたいと思っていますが、「春休みに勉強したい!」という方々のために、春休みの間、C++の簡単な勉強をブログで行っていきたいと思います。
ただ、C言語の構造体が分かっているものとしてお願いいたします。
もっと詳しいことを知りたいという方々は、是非本を読んでくださいね。
前置きが長くなりましたが、では始めていきたいと思います。
ども、こんばんわ~
久しぶりに登場のZAKIです
学校ではラボにちょこちょこ出現していますけどねw
製作もそろそろ終盤
完成に向けてラストスパートをかけているころじゃないでしょうか
今年の2年生の作品は完成度が高いのが多そうなので楽しみです
寒いですが、風引かないように体調には気をつけましょうね
さて、今回は「C++でクラスの不思議」です。
まず、このコードを見てください。
#include <stdio.h>
//インターフェイスA
class A {
public:
virtual void MesA() = 0;
};
//インターフェイスB
class B {
public:
virtual void MesB() = 0;
};
//実装クラスC
class C : public A , public B {
public:
void MesA() { printf("Aのメソッドです。\n"); }
void MesB() { printf("Bのメソッドです。\n"); }
};
//メイン関数
int main()
{
C c;
void * pVoid = NULL;
B * pB = NULL;
pVoid = (void *)&c;
//普通にキャストした場合
pB = (B *)&c;
pB->MesB();
//void *を通してキャストした場合
pB = (B *)pVoid;
pB->MesB();
return 0;
}
さぁ、このコードを実行したとき、どういう結果が出るでしょうか?
「あれ?」と思うような結果になりませんか?
皆さん始めまして。
私、GES会長と開発部代表者を務めさせて戴いている和佐田雅史と申します。
今後プログラムの技術的な事に関しては卒業まで私が記事を担当する事になりましたので宜しくお願い申し上げます。
☆ クラスとは?
※今回はクラスを説明するにあたって、構造体という機能を知っているのを前提で説明させていただきます。
皆さんは構造体というものを1年生のときに習ったと思います。
キャラクタの構造体の中にHPやMPを入れたり、ステータスを入れたりしてデータを管理していたのではないでしょうか?
キャラクタの構造体の中にHPやMPを入れたり、ステータスを入れたりしてデータを管理していたのではないでしょうか?
皆さんも少なからず、構造体に関数を持たせたいと思ったことがあるはずです。
しかしC++のclassという機能を使うと変数や関数を持たせることが可能になります。
キャラクタの攻撃関数だったり、描画処理等をメンバに持たせることが可能です。
構造体でも同じような事は出来ますが、構造体は基本的にデータ集合を扱うもの
クラスはオブジェクトとして管理する事を目的としています。
では早速サンプルプログラムを見てみましょう。
// キャラクタベースクラスの定義
class CharacterBase
{
public:
// メンバ変数
int Hp;
int Mp;
// 攻撃力
int Attackpt;
// 攻撃する関数
void Attack(int* EnemyHp);
CharacterBase();// コンストラクタ
~CharacterBase();// デストラクタ
};
☆ メンバ変数とメソッド
// メンバ変数
int Hp;
int Mp;
// 攻撃力
int Attackpt;
クラスの中宣言されているHpやMpなどの変数をメンバ変数と呼び、定義されている関数をメソッドと呼びます。
メンバ変数はpublicにするとクラス内、外部全てアクセス可能になります。
☆ メソッドの定義仕方
基本的にメソッドの定義は.hpp( ヘッダファイル )に書いて、クラスの本体自体はcppファイルに書きます。
書式
戻り値 クラス名::メソッド名(引数……)
{
}
//------------------------------------------------------------------
// 概要 : 攻撃する関数
// 引数 : 敵のHpへのポインタ
// 戻り値 : なし
//----------------------------------------------------------------------------
void CharacterBase::Attack( int* EnemyHp )
{
( *EnemyHp ) -= this->Attackpt;
if( ( *EnemyHp ) < 0 )
{
MessageBox( NULL , "和佐田をやっつけた!!" , "Victory" , MB_OK );
}
}
このようにクラスで管理すると、プログラムが組みやすくなるわけです。
プレイヤー初期処理やプレイヤー変数更新処理、プレイヤー描画処理等を一々関数を作ってソース分割なんてしなくても良くなりますしクラス内でグローバルに参照したいならprivate:指定すればクラス内で自由にアクセス可能ですし、外部から参照されない美しい設計のプログラムを書くことが出来ます。
それでは今日の講座はここまでとします。