C++의 객체지향 지원
모든 호출을 실행 중에 정하면 느립니다. 빨라야 하는 C++는 어떻게 했을까?
C++
명령형 언어에 객체를 더했습니다
C++는 C와 시뮬라 67(Simula 67)에서 발전했습니다. 변수와 대입문이 중심인 명령형 언어 C의 타입을 그대로 두고 클래스를 더해, 두 타입 체계가 함께 있는 혼합 언어입니다.
포인터는 5강에서 본, 주소를 담은 변수입니다. C++에는 생성자와 함께, 객체가 없어질 때 불리는 소멸자(destructor)도 있습니다.
접근 제어
멤버마다 문을 셋 가운데 고릅니다
C++는 멤버마다 셋 가운데 하나를 붙입니다. private은 그 클래스 안에서만, protected는 서브클래스까지, public은 클라이언트까지 쓸 수 있습니다.
멤버는 클래스에 든 변수와 메서드, 클라이언트는 클래스를 밖에서 가져다 쓰는 코드입니다. 10강에서 본 friend는 예외입니다.
상속 방식
물려받을 때 문을 더 좁힐 수 있습니다
C++에서는 상속할 때에도 접근 지정자를 적습니다. public으로 상속하면 부모에서의 접근이 그대로 유지됩니다. private으로 상속하면 물려받은 멤버가 서브클래스에서 모두 private이 됩니다.
class Circle : public Shape는 교재의 예입니다. 어느 멤버가 protected인지는 예시입니다.
다중 상속
이름이 부딪히면 ::로 가립니다
C++는 다중 상속을 지원하고, 부모를 쉼표로 나열합니다. 4편에서 본 이름 충돌은 범위 결정 연산자(scope resolution operator) :: 앞에 클래스 이름을 붙여 어느 부모의 것인지 밝혀서 풉니다.
RoundRect는 예시입니다. 교재의 예는 Thread와 Drawing을 물려받는 DrawThread입니다.
virtual
virtual을 붙여야 동적
C++에서는 메서드에 virtual을 붙여야 동적 바인딩 대상이 됩니다. 붙이지 않으면 정적으로 바인딩됩니다. 어느 쪽인지는 프로그래머가 정합니다.
void는 돌려주는 값 없음, ->는 가리키는 객체의 멤버라는 뜻입니다. 교재의 draw는 = 0을 붙여 몸체를 비운 순수 가상 함수(pure virtual function)입니다.
왜 고르게 했을까
전부 동적이면 느립니다
하나도 동적으로 잇지 않으면 3편에서 본 이점을 잃고, 모두 동적으로 이으면 비효율적입니다. 그래서 C++는 고르게 했습니다. 모두 동적으로 잇는 스몰토크는 C++보다 약 10배 느립니다.
인터프리트는 1강에서 본, 미리 번역해 두지 않고 실행하면서 한 줄씩 해석하는 방식입니다.
다음 편