프로그래밍 공부

전문가를 위한 C++정리 73

카테고리 설명
  • 9.6 상속과 관련된 미묘한 문제들 클래스를 확장할 때는 여러 가지 문제가 발생한다. 클래스의 어떤 특성이 유지되고 어떤 특성이 변경되도록 할 것인가? virtual 키워드의 사용 여부는 어떤 영향을 끼치나? 등등... 9.6.1 오버라이딩을 통한 메서드의 특성 변경 대부분 구현 내용을 변경하기 위한 목적으로 메서드를 오버라이딩한다. 하지만 어떤 떄는 구현 내용이 아니라 메서드의 다른 특성을 바꾸고 싶을 때가 있다. 9.6.1.1 리턴 타입 변경 메서드를 오버라이딩할 때는 원본 메서드의 선언, 즉 메서드 프로토타입과 완벽히 같게 오버라이딩을 하는 것이 기본이다. 즉, 구현 내용은 바뀌되 메서드의 프로토타입은 바뀌지 않는다. 그런데 꼭 그래야 하는 것은 아니다. C++에서는 오버라이딩하는 메서드의 리턴 타..

  • 9.5 다중 상속 다중 상속은 객체지향 프로그래밍에서 다소 꺼려지는 부분이다. 다중 상속은 복잡하기만 하고 불필요할 수도 있다. 9.5.1 복수 클래스로부터의 상속 문법적으로는 여러 클래스를 동시에 부모로 두는 것이 그리 복잡하지 않다. 다음처럼 베이스 클래스의 이름을 나열하기만 하면 된다. class Baz : pulbic Foo, pulbic Bar { // 기타 정의... }; 이렇게 부모 이름을 나열함으로써 Baz로부터 생성된 객체는 다음과 같은 특징을 가지게 된다. Baz객체는 Foo와 Bar의 모든 public멤버와 메서드를 지원한다. Baz객체는 메서드 구현부에서 Foo와 Bar의 protected멤버와 메서드에 접근할 수 있다. Baz객체는 Foo또는 Bar로 업케스팅 될 수 있다. 새로운..

  • 9.4 다형성을 위한 상속 지금까지 파생 클래스와 그 부모간의 관계에 대해 배웠다. 이제는 가장 강력한 시나리오인 다형성 구현에 상속을 어떻게 이용하는지 알아볼 차례다. 전에 사용했던 다형성의 활용은, 공통의 부모를 가지는 객체를 부모타입의 객체가 필요한 자리에 마음대로 바꿔 넣어 사용한 예 이다. 9.4.1 스프레드 시트 다시보기 7장과 8장에서는 객체지향 프로그래밍을 설명하기 위해 스프레드 시트 예제를 활용했다. SpreadSheetCell은 데이터의 한 항목을 나타내고, 각 항목의 값은 double또는 string타입 이다. 다음은 SpreadSheetCell클래스의 정의로, 셀의 값을 세팅할 때 double이나 string중 어떤 값이든 이용할 수 있다. 단, 현재 셀의 데이터 값을 읽어올 때는 ..

  • 9.3 부모를 존중하라 파생 클래스를 작성할 때는 베이스 클래스와의 연동을 고려해야 한다. 생성 순서, 생성자 체이닝, 캐스팅 같은 부분은 모두 잠재적인 버그의 온상이다. 9.3.1 부모의 생성자 객체는 그냥 생성될 수 없다. 베이스 클래스와 그에 속한 객체들이 함께 생성되어야 한다. C++는 생성 순서를 다음과 같이 정하고 있다. 클래스가 베이스 클래스를 가졌으면 베이스 클래스의 디폴트 생성자가 실행된다. 단, 파생 클래스의 생성자 초기화 리스트에서 명시적으로 베이스 클래스의 특정 생성자를 호출하고 있다면, 그 생성자가 호출된다. static이 아닌 클래스 맴버들이 선언 순서에 맞춰 생성된다. 클래스의 생성자 바디가 실행된다. 이러한 생성 순서는 재귀적으로 적용된다. 만약 클래스가 조부모를 가졌으면, ..

  • 9.2 코드 재사용을 위한 상속 지금껏 상속을 이용하기 위한 기본적인 문법을 익혔다. 이제는 상속이 중요하게 활용되는 케이스를 알아보자. 상속은 이미 존재하는 코드를 다시 활용하기 위한 핵심 창구이다. 실제 애플리케이션 코드 재사용을 위해 코드가 어떻게 상속되고 이용되는지 살펴보자. 9.2.1 날씨 예보를 위한 WeatherPrediction클래스 간단한 날씨 예보 프로그램을 만들어야 한다고 하자. 이 프로그램은 섭씨로도 작동하고 화씨로도 작동해야 한다. 그리고 날씨 예보는 별도의 전문적인 분야이기 떄문에, 직접 만들지 못하고 전문 업체가 만든 클래스 라이브러리를 이용한다. 이 라이브러리는 현재 온도와 목성과 화성 사이의 거리를 기반으로 날씨를 예측한다. ( 물론 이러한 예측 방법은 가상적인 설정이다.)..

  • 9. 클래스 상속 활용 테크닉 상속이 없다면 클래스는 단지 특정 기능에 연관된 데이터 구조에 지나지 않는다. 물론 그것만으로도 절차적 프로그래밍 언어보다 크게 진보된 것 이지만 상속이 추가됨으로써 아주 새로운 지평을 열었다. 상속을 이용하면 이미 존재하는 클래스를 기반으로 새로운 클래스를 만들 수 있다. 이러한 방식으로 클래스는 재사용할 수 있고 확장 가능한 컴포넌트가 된다. 9.1 상속을 통한 클래스 생성 is-a관계를 배우면서 실 세계의 객체들이 is-a패턴의 계층을 가진다는 것을 살펴봤다. 프로그래밍에서 is-a 관계는 어떤 클래스를 기반으로 다른 클래스가 존재할 떄 적용된다. 이것을 구현하는 방법으로 원본 클래스의 코드를 복제하여 적절하게 일부를 바꾸거나 추가해서 새로운 클래스를 만들 수 있다. ..