継承しているが呼ばれない

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
dic

継承しているが呼ばれない

#1

投稿記事 by dic » 15年前

下にあるソースでModuleDを継承させ
Module10::Exe()
Module10::Exe2()
を実装しましたが
Module10::Exe2 は呼ばれずに ModuleD::Exe2 が呼ばれてしまいます

やりたいこととしては Module10 に メソッドを追加して
ModuleD インスタンスからそのメソッドをよびたいのですがうまくいきません

どこが間違っているのでしょうか?
// 123.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//

#include "stdafx.h"

#include <vector>
using namespace std;

class    Module
{
public:
    virtual    void    Exe() = 0;
};
class    ModuleD    :    public    Module
{
public:
    void    Exe();
    void    Exe2();
};
class    Module10    :    public    ModuleD
{
public:
    void    Exe();
    void    Exe2();
};
class    Module20    :    public    ModuleD
{
public:
    void    Exe();
};

void    ModuleD::Exe() { printf( "ModuleD::Exe()\n" ); }
void    ModuleD::Exe2() { printf( "ModuleD::Exe2()\n" ); }

void    Module10::Exe()
{
    printf( "Module10::Exe()\n" );
}
void    Module10::Exe2()
{
    //    よばれない
    printf( "Module10::Exe2()\n" );
}

void    Module20::Exe()
{
    printf( "Module20::Exe()\n" );
}


int _tmain(int argc, _TCHAR* argv[/url])
{
    ModuleD    *module10    = new Module10;
    ModuleD    *module20    = new Module20;

    vector<ModuleD*>    manager;

    manager.push_back( module10 );
    manager.push_back( module20 );

    vector<ModuleD*>::iterator p = manager.begin();

    while( p != manager.end() )
    {
        (*p)->Exe();
        (*p)->Exe2();
        p++;
    }

    delete    module10;
    delete    module20;

    return 0;
}
画像

dic

Re:継承しているが呼ばれない

#2

投稿記事 by dic » 15年前

class    ModuleD    :    public    Module
{
public:
    void    Exe();
    virtual void    Exe2();
};
virtual にしたら呼ばれました

閉鎖

“C言語何でも質問掲示板” へ戻る