문제

제가 질문을 기반으로 질문

섹션 http://www.parashift.com/c%2B%2B-faq-lite/private-inheritance.html#faq-24.3 다음과 같은 설명:

합법적인,장기간 사용에 대한 개인의 상속하는 경우를 클래스를 구축 프레드를 사용하는 코드 클래스에서 윌마,그리고 코드 클래스에서 윌 요구를 호출하는 멤버 함수에서 새로운 클래스,프레드.이 경우에는 프레드는 통화가 아닌 가상 메서드에서 윌마,에서 최고의 서비스를 통화(일반적으로 순수한 가상 메서드)그 자체에있는,재정의하여 프레드.이것은 훨씬 더 될 것입하으로 구성입니다.

그러나 나는 이유를 알고 싶을 사용하여 공공 inheritence 지 않을 것 같은 효과를 얻을.i.e 다음과 같은 조각 c#의 코드 같은 것은..

class Wilma
{
    protected void FredCallsWilma() {
        Console.Write("Fred Calls Wilma ;");
        WilmaCallsFred();
    }

    protected virtual void WilmaCallsFred() {}
}

class Fred : Wilma
{
    public void barney(){
        Console.Write("barney;");
        FredCallsWilma();
    }

    protected override void WilmaCallsFred(){
        Console.Write("Wilma Calls Fred ;");
    }
}

class Program
{
    static void Main(string[] args){
        Fred f1 = new Fred();
        f1.barney();
    }
}

인쇄

바;프레드를 호출 윌;윌마 호출 프레드

그래서 무엇인가에 대한 특별한 개인 inheritence 로에서 인용하는 c++faq 합니다.지 않을 것입 대체 공 inheritence 개인 inheritence 잘 작동을 달성하는 결과가?

도움이 되었습니까?

해결책

공공 상속하게 기본 클래스에 액세스할 수 있습니다.예를 들어,포인터 파생된 클래스 로 변환될 수 있(암시적으로 덜)포인터를 기본 클래스입니다.을 고려한 스택에서 파생된 연결 목록입니다.당신은 일반적으로 원하지 않을 것이 누군가가 암시적으로 변환하 배열을 그것의 기초에 연결 목록하는 것을 할 수 있도록 하는 것을 허용되지 않 스택 등에 삽입하는 항목을 삭제하는 중간에 있습니다.

일반적인 의미에 기인 개인 상속은"구현하는 측면에서"--우리는 일반적으로 수행되지 않도록 허용하려는 외부 세계의/사용자를 참조/알/료는 사실에 대해 이 클래스는 기본 클래스입니다.공공 상속 따라야 합니다 Liskov 대체 원칙는 것을 말한 파생 등 대체 할 수 있습니다 어디서나 공공 기본 클래스입니다.과 개인의 상속,우리가 특별히 말하지 않는 파생 등 대체할 수 있습에 대한 기본 클래스입니다.

공공 상속가 디자인 기술입니다.의 의도를 허용하는 코드를 작성에 의해 사용되는 다른 코드는 이미 알고 작업하는 방법과 인터페이스에 의해 제시 기본 클래스입니다.

개인 상속가 구현한 기술입니다.그 목적은 단지 구현을 간소화하려면 코드를 사용하여 기본 클래스입니다.

다른 팁

그래 너가 옳아. 인용 된 단락은 아동 수업이 상속 수업의 개인 구성원에게 액세스 할 수 있다는 사실 만 인용하고 있으며,이를위한 가능한 사용 사례입니다.

어떤 사람들은 상속 수업의 개인 구성원에 액세스 할 수 없다고 잘못 가정합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top