2010-04-15 6 views
0

나는 추상 클래스에서 파생 된 파생 클래스가 있습니다. 코드는 다음과 같습니다. Aquarium에서 파생 된 FishTank 클래스가 있으며 수족관은 아이템에서 파생됩니다. 내 질문은 내가 가상 int의 정의를 넣어해야 minWidth() const = 0; 다시 수족관에서 또는 아래의 코드가 충분합니까?C++의 추상 클래스

class Item{ 
public: 
    virtual int minWidth() const = 0; 
}; 

class Aquarium: public Item{ 
public: 
    virtual int calWidth() = 0; // Pure virtual function. 
}; 

class FishTank : public Aquarium{ 
    public: 
     FishTank(int base1, int base2, int height); 
     ~FishTank(); 
    int calWidth(); 
     int minWidth(); 
}; 

답변

6

다시 할 이유가 없습니다. 공간을 낭비하고 오타에서 컴파일 오류를 얻을 수있는 기회 만 제공합니다. :) 일단 당신이 상속 받으면 어쨌든 거기에 있었던 것과 같습니다.

그러나 실제로 구현하지 않아도됩니다. 왜? 당신은 FishTankconst을 놓치고 :

int minWidth() const; // <-- const! 
1

당신은 minWidth를 다시 선언 할 필요가 없습니다; 순수 가상 함수는 Item에서 상속됩니다.

1

"정의"또는 "선언"을 의미합니까? 적합한 기본 정의가 모든 수족관에 적용될 가능성이 있다면 수족관 클래스에서 모든 것을 정의해야하지만 순수 가상으로 만들고 싶지 않을 수도 있습니다. 그렇지 않으면 모든 파생 클래스가 필요하다하더라도 여전히 상속해야합니다. 기본 클래스 구현을 호출하십시오.

그렇지 않으면 다시 선언 할 필요가 없습니다. 어느 방법으로도 파생 된 구체적인 클래스는 여전히 함수를 재정의해야하며 포인터 또는 Item 또는 Aquarium에 대한 참조를 통해 호출 될 때 함수의 동작을 변경하지 않습니다.