2009-12-15 3 views
6

다른 클래스에서 클래스를 파생하고 함수를 덮어 쓰면 파생 클래스에서 myFunc 구현 내에서 Base::myFunction()을 호출하여 기본 함수를 호출 할 수 있습니다.파생 클래스를 호출하여 기본 함수 호출

그러나 Base 클래스에서 기본 함수가 어떤 식 으로든 호출되고이를 덮어 쓰기 함수에서 명시 적으로 호출하지 않고 정의하는 방법이 있습니까? (전이나 실행 파생 기능 이후에)

또는 더 나은 내가 내 가상 Base 클래스의 가상 함수, 두 개의 구현 개인 기능 before()after()이있는 경우는 Base 클래스에서 그 전에를 정의 할 수 있습니다 이 Base 클래스의 파생 클래스에서 함수가 호출 된 후 before()after()이 호출됩니까?

감사합니다.

+4

어떤 언어입니까? –

+2

아마도 C++ ('Base :: myFunction'는 C++로 보입니다) –

+0

슬프게도 구현이 여전히 부족하지만 aspect 지향 프로그래밍을 요구한다고 생각하지 않을 수 없습니다. –

답변

21

아니요, 불가능합니다.
하지만 당신과 같이 다른 가상 함수를 호출하여 시뮬레이션 할 수 있습니다 :

class Base 
{ 
public: 
    void myFunc() 
    { 
    before(); 
    doMyFunc(); 
    after(); 
    } 

    virtual void doMyFunc() = 0; 
}; 
+0

+1, 방금 그 제안을 게시하려고했습니다. – Roddy

+8

가상 함수를 보호 (또는 심지어 private)하게하면 파생 클래스가 메서드를 공개적으로 만들 수 있으므로 다른 코드가 base에 대한 참조를 통해 직접 가상 메서드를 호출하지 못하도록합니다 (파생 형식에 대한 참조가없는 경우). 가능) –

+0

이것은 내 요구에 봉사합니다! 고맙습니다 :) – Mat

0

파생 클래스가 기본 메서드를 오버로드하거나 오버라이드하지 못하게하려고합니다. 언어를 기준으로 메소드를 '무시할 수 없음'으로 표시하여 권장 할 수 있지만 항상 그 주위에 방법이 있습니다.

다른 말로하면 누군가 특정 방식으로 수업을 사용하도록 강요 할 수 없으며 사용 방법 만 말해주십시오.

+1

아니요 - 메서드를 덮어 쓰길 원하지만 - 파생 클래스에서 구현하기 전에 basefunction을 호출하기를 원합니다. – Mat

+0

흥미 롭습니다. – hometoast

0

++ C에 대한 응답, 당신은 당신이 원하는 방법으로 소위 "보이지 않게"상속 기능을 가질 수 없습니다.

상속 된 클래스를 통해 호출하는 유일한 방법은 생성자와 소멸자입니다.

관련 문제