ページ 11

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

Posted: 2010年5月06日(木) 08:20
by dic
下にあるソースで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;
}
画像

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

Posted: 2010年5月06日(木) 08:30
by dic
class    ModuleD    :    public    Module
{
public:
    void    Exe();
    virtual void    Exe2();
};
virtual にしたら呼ばれました