2011-07-04 11 views
1

C++では、親関数から子関数を呼び出すことができます。親関数内で上書きされた子関数を呼び出す

例を見てみましょう:親クラスは、関数(解析)で一般的なワークフローを定義します。次に、ワークフローは、フローの一部を表すさまざまなメソッドを呼び出します(parseElementA)。これらの関数は、親クラスの一部であるstandart関数が使用されない場合、子クラスによって上書きされます。

私の問題は次のとおりです。子オブジェクトを作成し、ワークフロー関数(解析)を実行します。上書きされた関数(parseElementA)がワークフロー関数内で呼び出されると、子からではなく親から関数が呼び出されます。 私は子供の上書きされた関数を呼び出すために何をすることができます。

class Parent { 
     public: 
     void parse() { parseElementA(); } 
     virtual void parseElementA() { printf("parent\n"); } 
    }; 

    class Child : public Parent { 
     public: 
     void parseElementA() { printf("child\n"); } 
    }; 

    Child child; 
    child.parse(); 

出力は親です。それは子供を返すと私は何をすることができます。

ありがとうございました。

+0

まず私はあなたのコードを編集したが、私は(セミコロン)を追加するために十分な文字を持っていない、それは罰金コンパイルするように私の答えを追加... – jopasserat

+0

を@jHackが、実際には問題がありましたか?私は固定コードの問題を見ることができないので、今質問についてはわかりません... – juanchopanza

+0

@juanchopanza: 'printf'の後にセミコロンがありません...コロンがないのでスペースを追加できました'public'の後にもう一度編集しようとしましたが、2文字しか追加できませんでした。 – jopasserat

答えて

9

コードからコンパイルエラーを修正した後、it works fine

+0

@ianmmilindも私の修正を加えましたが(私はOP質問を編集していましたが) – jopasserat

2
#include <cstdio> 

class Parent { 
     public: 
       void parse() { parseElementA(); } 
       virtual void parseElementA() { printf("parent\n"); } 
}; 

class Child : public Parent { 
     public: 
       void parseElementA() { printf("child\n"); } 
}; 

int main() { 

    Child child; 
    child.parse(); 

    return 0; 
} 
+0

ありがとう、私はコードを更新しました。 –

関連する問題