2014-08-27 2 views
1

난 그냥 추상 클래스 자체에서 순수 가상 함수의 구현을 할 수있는 것으로 나타났습니다. GCC는 불평하지 않습니다. 그러한 구현을 사용합니까? 아무도 그것을 사용할 수 있습니까? (AbstractClass::PureVirtualFunction가 개인이 아닌 경우)추상 클래스에서 순수 가상 함수를 구현 - 거기에 그것을 사용하고 있습니까?

class AbstractClass 
{ 
    virtual void PureVirtualFunction() = 0; 
}; 

void AbstractClass::PureVirtualFunction() //Is there any use of this implementation? 
{ 
    cout << "I am inside pure virtual function of AbstractClass" << endl; 
} 

class DerivedClass : public AbstractClass 
{ 
    public: 
     void PureVirtualFunction(); 
}; 

void DerivedClass::PureVirtualFunction() 
{ 
    cout << "I am inside pure virtual function of DerivedClass" << endl; 
} 

답변

1

당신은 예를 들어 DerivedClass 구현에서 호출 할 수 있습니다

void DerivedClass::PureVirtualFunction() 
{ 
    AbstractClass::PureVirtualFunction(); 
    cout << "I am inside pure virtual function of DerivedClass" << endl; 
} 

심지어는 개인의 당신이 AbstractClass에서 자신을 호출 할 수있는 경우 :

class AbstractClass 
{ 
    virtual void PureVirtualFunction() = 0; 

public: 
    void CallPureVirtualFunction() { 
     AbstractClass::PureVirtualFunction(); 
    } 
}; 

DerivedClass().CallPureVirtualFunction(); 

I am inside pure virtual function of AbstractClass 
4

파생 클래스에서 액세스 할 수있는 기본 구현을 제공하는 데 사용할 수 있습니다.

한 가지 가능한 사용이 가상 함수가 매우 중요이다 "친애하는 파생 클래스의 저자이며, 나는 당신이 당신이 그것으로 무슨 일을하는지 알고 있는지 확인하고 싶다. 나는 당신에게 해야합니다 기본 구현을 제공하지만 것 명시 적으로 사용하십시오. " 이것은 다음과 같이 이루어질 것입니다 :

class AbstractClass 
{ 
public: 
    virtual void PureVirtualFunction() = 0; 
}; 

void AbstractClass::PureVirtualFunction() //Is there any use of this implementation? 
{ 
    cout << "I am inside pure virtual function of AbstractClass" << endl; 
} 

class DerivedClass : public AbstractClass 
{ 
    public: 
     void PureVirtualFunction(); 
}; 

void DerivedClass::PureVirtualFunction() 
{ 
    AbstractClass::PureVirtualFunction(); 
} 
+0

PureVirtualFunction이 private이기 때문에 이것은 작동하지 않습니다. – ontherocks

+0

@ontherocks 고마워요, 고침. – Angew

관련 문제