C++ More On Classes
클래스 상속과 Friend
- protected : 상속관계에서는 public하게, 외부에서 볼때는 private 하게 작동
- private : 클래스 내부에서만 가능
public : 외부에서 접근 가능
- friend
- reference(&) vs Pointer(*) : refernce로 대입하는 것은 C++의 딥 카피 문법으로 이해하면 됨.
- Operator Overloading
virtual function : 가상 함수가 필요한 배경에는 포인터가 있다. 내가 이해한 바에 따르면, 객체를 가르키는 포인터는 객체와 같은 클래스여야 한다. 아니다 더 정확히는 객체를 포함할 수 있는 클래스여야 한다. 아들 클래스에서 만든 객체를 아버지 클래스 포인터로도 가르킬 수 있다는 뜻이다. 여기서 문제가 생기는데, 아버지 클래스에서 포인터가 접근하려는 요소가 아들 클래스에서 오버라이딩 한 요소라면 어떻게 될까.
요소에는 속성과 행동이 있는데 행동은 이 경우를 해결하기 위해서 virtual이라는 타입을 붙여서 처리한다.- 왜 포인터는 타입을 가져야 하는가.
pure virtual function : pure virtual function을 상속받은 클래스에서 같은 이름의 함수가 없으면 애러를 띄울 것이다.
Abstract Classes You cannot create objects of the base class with a pure virtual function. Running the following code will return an error:
- function template : Wouldn’t it be much more efficient to be able to write one version of sum() to work with parameters of any type? C++이 모든 객체에 타입을 지정하면서 프로그래머가 겪는 문제는, 함수에 파라미터 타입과 리턴 타입이 명확하지 않다면 모든 경우의 수에 대해서 새로운 함수를 만들어 줘야 한다는 게 아닐까.
template type parameters
- 템플릿의 약점 : 템플릿은 입력받는 두 파라미터가 같은 타입이라면 유용하지만 같은 타입이 아니라면 애러를 띄운다. 더 나은 방법은 없을 까. :
- Function templates also make it possible to work with multiple generic data types
- T, U, X는 우리가 정의하는 가상 타입의 이름이다.
즉 다양한 파라미터를 받을 때는 아쉽지만 다양한 가상 타입을 사용해야 한다.
Class Template : 클래스 템플릿을 사용해서 클래스 내에 들어가는 변수 타입과 메소드들의 리턴 타입을 범용화하자.
- generic template : 모든 변수에 대해서 같은 프로시저를 취할 때 사용한다.
- specialization template : 특정 변수 타입에 대해서만 다른 프로시저를 취할 때 사용한다. 오버로딩이라고 생각하면 된다.