忍者ブログ
AdminWriteComment
プログラミング、ゲームシステムなど普段考えたことについてのメモ帳代わり。
No.
2025/05/09 (Fri) 21:36:40

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

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;
}

--------------------------------------
 

て書いたら、 「error C2276: '&' :仮想関数のアドレスを取ろうとしました。」  と返されました。  メンバ関数はインスタンス化されるまで存在しないからアドレスが確定できない・・・のは分かるんだけど、それならメンバ変数だって同じことだし。
大体、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
[8]  [7]  [6]  [5]  [4]  [3]  [2]  [1
カレンダー
04 2025/05 06
S M T W T F S
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
フリーエリア
最新コメント
最新トラックバック
プロフィール
HN:
kamiyama
性別:
男性
自己紹介:
学生。ヘタレゲームプログラマ。
バーコード
ブログ内検索
P R
アクセス解析
アクセス解析
忍者ブログ [PR]