2012-03-13 17 views
2

で派生関数にアクセスするには、次の作業を行う方法がありますか、それとも回避策がありますか?私は何かを欠いているに違いない。派生クラスへC++ポリモーフィズム - 基本ポインタ

class base 
{ 
public: 
    int someInt; 
    virtual void someFunction(){} 
}; 

class derived : public base 
{ 
public: 
    void someFunction(){} 
    void anotherFunction(){} 
}; 

int main (int argc, char * const argv[]) { 

    base* aBasePointer = new derived; 

    aBasePointer->anotherFunction(); 

    delete aBasePointer 

    return 0; 
} 
+1

ベースで仮想的にするには 'anotherFunction()'が必要です。または、派生するポインタを介して呼び出します。現時点では、この機能については何も知らない。 – BoBTFish

+0

* real *関数とは何ですか?なぜあなたはこれをしたいのですか? –

+0

これは仮想であり、ベースでも定義されている必要があります。 Derivedに新しい仮想関数を追加すると、それは役に立ちません。 –

答えて

7

使用dynamic_cast<>意気消沈へのポインタ(結果をテストすることを忘れないでください)。ニムが動作する提案が、あなたがダウンキャストを実行している場合は、ほぼ確実に設計上の問題を持っている何

例えば

if ((derived* p = dynamic_cast<derived*>(aBasePointer))) 
{ 
    // p is of type derived. 
    p->anotherFunction(); 
} 
+1

素晴らしい、ちょうど私が後だったこと。 –

2

。あなたが達成しようとしていることを説明すれば、おそらくもっと良い選択肢を提案することができます。

-1

これは、それ以外

int main (int argc, char * const argv[]) { 

    derived* aDerivedPointer = new derived; 

    aDerivedPointer->anotherFunction(); 

    delete aDerivedPointer 

    return 0; 
} 

に動作します、あなたが達成しようとしているかについての詳細な情報を提供する必要があります。

関連する問題