プログラミング、ゲームシステムなど普段考えたことについてのメモ帳代わり。
No.3
2009/03/23 (Mon) 16:22:45
さほど調べずに書いています。
私は大抵やっつけ仕事なのでC++の仕様などあまり知らないのですが、
--------------------------------------
class Charactor{
private:
void Attack();
void Dush();
void Stand();
public:
void (*Action)();
void Init();
public:
Charactor();
virtual ~Charactor();
};
Charactor::Init(){
Action = &Stand;
}
大体、virtualつけてもいないのに仮想関数って・・・つまりメンバ関数は仮想関数と同義(そのクラス内に限った――継承関係を考えない場合)ってこと?
詳細は後で調べるとして・・・ 同様の方法を取るならstaticしかなく、staticにするとメンバ変数がダイレクトに扱えないから結局ダメ。
そうすると、やっぱり
--------------------------------------
enum ENUM_CHARACTOR_ACTION{
ACTION_STAND,
ACTION_ATTACK,
ACTION_DUSH
};
class Charactor{
private:
ENUM_CHARACTOR_ACTION m_enum_action;
private:
void Attack();
void Dush();
void Stand();
public:
void Action();
void Init();
public:
Charactor();
virtual ~Charactor();
};
Charactor::Init(){
m_enum_action = ACTION_STAND;
}
Charactor::Action(){
switch(m_enum_action){
case ACTION_STAND: Stand(); break;
case ACTION_ATTACK: Attack(); break;
case ACTION_DUSH: Dush(); break;
default: break;
}
}
--------------------------------------
みたいな感じになるのかね。
色々と誰かに聞きたい気はするけれど、あくまでこのページはメモ帳。コメントを残せるようにしたり新着がトップに上がるようにしたり・・・ということはしない方向で。
・メンバ関数はインスタンス化されない限り仮想関数扱い
・↑の文に騙されてはいけない
・詳細は改めて調査すべし
と、いうことでした。
私は大抵やっつけ仕事なのでC++の仕様などあまり知らないのですが、
--------------------------------------
class Charactor{
private:
void Attack();
void Dush();
void Stand();
public:
void (*Action)();
void Init();
public:
Charactor();
virtual ~Charactor();
};
Charactor::Init(){
Action = &Stand;
}
--------------------------------------
大体、virtualつけてもいないのに仮想関数って・・・つまりメンバ関数は仮想関数と同義(そのクラス内に限った――継承関係を考えない場合)ってこと?
詳細は後で調べるとして・・・ 同様の方法を取るならstaticしかなく、staticにするとメンバ変数がダイレクトに扱えないから結局ダメ。
そうすると、やっぱり
--------------------------------------
enum ENUM_CHARACTOR_ACTION{
ACTION_STAND,
ACTION_ATTACK,
ACTION_DUSH
};
class Charactor{
private:
ENUM_CHARACTOR_ACTION m_enum_action;
private:
void Attack();
void Dush();
void Stand();
public:
void Action();
void Init();
public:
Charactor();
virtual ~Charactor();
};
Charactor::Init(){
m_enum_action = ACTION_STAND;
}
Charactor::Action(){
switch(m_enum_action){
case ACTION_STAND: Stand(); break;
case ACTION_ATTACK: Attack(); break;
case ACTION_DUSH: Dush(); break;
default: break;
}
}
--------------------------------------
みたいな感じになるのかね。
色々と誰かに聞きたい気はするけれど、あくまでこのページはメモ帳。コメントを残せるようにしたり新着がトップに上がるようにしたり・・・ということはしない方向で。
■■■まとめ
・メンバ関数はインスタンス化されない限り仮想関数扱い
・↑の文に騙されてはいけない
・詳細は改めて調査すべし
と、いうことでした。
PR