2010-01-15 3 views
0
class A 
{ 
public: 
    virtual void 
     doSomething(void) 
    {} 

    void 
     doStuff(void) 
    { 
     doSomething(); 
    } 
}; 

class B : public A 
{ 
public: 
    void 
     doSomething(void) 
    { 
     // do some stuff here 
    } 
}; 

B * b = new B; 
b->doStuff(); 

내게 세그먼트 오류가 발생합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 그것은 내 생각에 잘 작동해야합니다!기본 클래스 메서드에서 하위 클래스 가상 메서드 호출

답변

1

내가 알 수있는 한, 당신은 클래스 정의의 코드에서 다형성을 수행하지 않는다.

b->doStuff()B 클래스의 메소드를 호출해야합니다. 만약 당신이 B 내부 전화 A-> doSomething 당신이 사용할 수 A:: doSomething

+0

B에는 doStuff 멤버가 없으므로 A :: doStuff가 호출됩니다. –

+0

그는 polymorphic'doSomething'을 구현하는 non-polymorphic'doStuff'를 호출합니다. – ChrisW

+0

'B' 클래스에서 선언되고'A' 클래스에서 호출 된'doStuff()'를 호출하려고합니다. – kjagiello

0

당신은하지 말았어야, 그것은 컴파일 문제없이 나를 위해 실행. 문제를 일으키는 REAL 코드를 게시하고 코드 형식을 다시 생각해보십시오.

+0

내 잘못했다. 하지만 어쨌든 문제는 아니 었습니다. – kjagiello

5

나는 구문 오류를 수정하고 main() 함수를 추가 한 후 : ... class Apublic A

관련 문제