문제

C#의 밀봉 된 키워드를 읽고있었습니다. 나는 마지막으로 표준 라이브러리에서 상속 된 것을 기억할 수 없습니다. C ++에서는 몇 가지 유형을 입력하고 일부 매개 변수를 사용하는 STD 인터페이스를 상속하는 것을 기억합니다. 그러나 그것은 1) 사소한 2) 인터페이스

내 머리 꼭대기에서, 나는 상속 될 것으로 예상되는 가상 기능이없는 수업을 기억하지 못한다. 누구든지 인터페이스가 아닌 사소한 클래스를 상속 해야하는 상황에 대해 말해 줄 수 있습니까?

나는 가상 기능이 없다면 수업을 상속하지 않는 것이 좋은 규칙이라고 말할 수도 있습니다. 이것이 좋은 경험이 있습니까?

참고 : 나는 연산자 someclass & someclass () {return m_someclass; }이 경우 다른 클래스로 내 객체를 전달해야합니다. 잘 작동한다.

도움이 되었습니까?

해결책

실제로 C ++에서 사용됩니다.이 모든 종류의 상속에 대해 사용됩니다 (예 : 구현, Mixins, Boost :: Copyable, 당신이 그것에서 상속하고 당신의 클래스를 비약 할 수 없게 만들고, 부스트 :: 운영자는 상속합니다. 일부 클래스에서 일부 운영자가 수업에 추가됩니다). 또한 C ++ 유형으로 메타 프로 그램을 수행 할 때 다른 유형에서 상속하는 것이 유형을 구성하는 가장 간단한 방법 중 하나입니다.

가상 함수가 없지만 "종류의"인터페이스의 역할을하는 클래스에서 상속하는 또 다른 경우는 정적 다형성 (Crtp와 같은 기술, Concretea : Basea)입니다. 모든 것이 컴파일 타임에 해결되기 때문에 가상 기능이 필요하지 않습니다.

그러나 클래스 런타임 폴리 흉부를 치료하려면 실제로 하나 이상의 방법을 가상으로 만들어야하며 이는 소멸자가 될 것입니다. 예외가 있지만 드물게 있습니다.

다형성 계층 구조가 있더라도 때로는 콘크리트 클래스에서 파생됩니다. 한 가지 예는 Textedit에서 파생 된 단일 라인 릿입니다. 그러나 이것은 부모 클래스의 캡슐화를 중단하기 때문에 약간 위험합니다 (예 : 방법은 일부 구현 세부 정보를 기대할 수 있으며 서브 클래스로 존중하고 보존해야합니다. 다음 버전에서 통지없이 변경하십시오.)

다른 팁

객체 지향 프로그래밍의 핵심 개념은 다형성이라고 주장합니다. 특정 클래스에서 상속이 다형성을 활용할 수 없다면 상속의 요점은 무엇입니까? 따라서 무시할 방법이 없다면 서브 클래스를 사용하지 마십시오. 코드의 복잡성 만 증가시킬 것입니다. 동일한 기능을 많이 원한다면 기존 클래스를 직접 감싸십시오.

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