2011-07-04 55 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問題),但upvoted你 – 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

謝謝你,我更新了代碼。 –