2011-07-04 7 views
1

을 호출하면 부모 함수에서 하위 함수를 호출 할 수 있습니다.상위 함수 내에서 덮어 쓴 하위 함수

예를 들어 보겠습니다. 상위 클래스는 함수 (구문 분석)에서 일반 워크 플로를 정의합니다. 그런 다음 워크 플로는 흐름의 일부를 나타내는 여러 메서드를 호출합니다 (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

고맙다. –

관련 문제