2017-01-03 4 views
-2

질문이 있습니다.서브 클래스의 가상 함수를 보완 할 수 있습니까?

void h_w() { cout << "Today is: " << math.rand(); << endl; } 

내가 그렇게 할 수 있습니까 :

virtual void h_w() { cout << "Hello, wolrd!" << endl; } 

그리고 임은 동일한 기능을 수행 : 내가 메인 클래스에서이 가상 함수가 있다고 가정하자? 내 하위 클래스에서 원하는 것처럼 주 기능의 본문을 바꿀 수 있습니까? 감사.

class base { 
public: 
    virtual void h_w() { std::cout << "Hello world!\n"; } 
}; 

class derived : public base { 
public: 
    void h_w() { std::cout << "Today is: " << rand() << "\n"; } 
}; 

int main() { 
    std::unique_ptr<base> b = std::make_unique<derived>(); 

    b->h_w(); 
} 

... 다음 예, C++의 그 지원 : 당신을 의미 가정

+0

"virtual function example"에 대한 좋아하는 참조를 검색하여 질문에 답해야합니다. –

+0

귀하의 질문에 명확하지 않은 완전한 예제를 보여주십시오. –

+0

그렇습니다. 다형성은 약 – Raindrop7

답변

3

는 다음과 같이합니다. 실제로 이것은 가상 함수의 표준적인 시연입니다. 적어도 이름을 기본 클래스로 "animal"으로, 파생 클래스로 "duck"으로 변경하고 "generic"(예 : 동물 "과"오리 "를 각각 나타낸다. 기록에 따르면, 동물을 기반으로 한 대부분의 예제는 단순히 코드 세트를 기대하는 것과 같은 단순한 규칙 집합을 따르지 않는 동물과 같이 다양한 방식으로 다소 파손되었음을 알 수 있습니다.

더 좋은 예는 레코드 읽기, 레코드 작성 및 일부 조건을 만족하는 레코드 세트 찾기 등을 허용하는 데이터베이스에 대한 일반 인터페이스를 정의하는 기본 클래스와 같은 것입니다. 그런 다음 파생 클래스는 특정 유형의 데이터베이스 (SQL 또는 일부 간단한 키/값 저장 엔진)에 따라 이러한 "명령"을 수행하는 구현을 제공 할 수 있지만 클라이언트는이를 알지 못하거나 성능과 같은 사소한 세부 사항을 넘어서서.

더 나은 이유는 우선 컴퓨터로 할 일에 훨씬 더 밀접하게 관련되어 있기 때문입니다. 둘째, 우리가 실제로 우리의 규칙을 따르고 우리가 정한 의무를 이행 할 수 있도록 데이터베이스를 정의 할 수 있기 때문입니다. 동물들과 함께 우리는 의미있는 규칙에 대한 모든 종류의 예외 사항들에 붙어 있습니다. 물론 (물론) Duck을 "돌팔이 소리"라고 말할 수있는 간단한 사실과 개가 "활 와우 "매우 유용하지는 않습니다. (드문 경우지만, 유용 할 것입니다. 우리는 아마도 사운드를 일종의 얼룩으로 저장/검색하고, 데이터로 더 잘 저장되는 무언가를 인코딩하기 위해 전체 유형을 정의하지 않을 것입니다.)

+0

입니다. 동물 표본을 얼마나 싫어합니까? 너무 많은 단계에서 너무 잘못되었습니다. – SergeyA

+1

@SergeyA : 여러 가지면에서 * 끔찍하지만 어쨌든 매우 널리 퍼져있는 것처럼 보입니다. –

+1

@sergey 당신이 반대하는 것과 같은 vertibrate. – Yakk