티스토리 툴바

참조는 포인터가 아니며, 포인터처럼 동작하지도 않아요.
차이점 3가지는, null 참조가 없다는 점, 모든 참조는 초기화가 필요하다는 점, 그리고 참조는 항상 초기화된 개체를 참조한다는 점입니다.
우선, 참조는 null 참조가 되면, 정의되지 않는 동작을 할 수 있기때문에, 만약 null을 사용하고 싶다면, 포인터를 쓰는게 맞아요.
참조가 반드시 초기화되어야 한다는건, 참조 초기화시에 개체가 반드시 존재해야 함을 의미해요.
const가 아닌 값은 임시 값으로 초기화가 안됩니다.
아래의 예에서 d는 12.3으로 초기화된 double 형식의 임시 위치를 참조하게 되는데, 이러한 임시 값은 범위를 벗어나면 소멸자가 호출되며 없어지지만, const 값으로의 참조를 초기화하면, 참조하는 한 계속 임시값이 존재하게 됩니다. 아래의 예를 보세요. 
double &d = 12.3; // 오류!
const double &cd = 12.3; //OK

추상 데이터 형식을 디자인하는데 있어 표준화된 방법은 없어요. 하지만 비슷한 단계를 거치는 것이 일반적이죠.
1. 형식의 이름은 충분히 자신의 성격을 설명할 수 있는 것으로 정해야 해요.
2. 형식이 수행할 수 있는 작업을 나열해 봐야해요. 생성자, 소멸자, 복사, 변환을 기억해요. get/set만 구현하는건 게으른거랍니다.
3. 형식의 인터페이스를 디자인 할땐, "올바르게 사용하기 쉽고 잘못 사용하기 어려운 것"이 되도록 해야해요. 사용자를 염두에 둔 디자인을 해야합니다.
4. 이제 형식을 구현해요.
2011/06/25 12:01 | Programming/Effective C++

public 상속은 "is-a(...는 ...의 일종이다)"를 의미해요. 클래스 Derived를 클래스 Base로부터 public 상속을 통해 파생시켰다면, 이는 Derived 타입으로 만들어진 모든 객체는 또한 Base 타입의 객체이지만, 그 반대는 되지 않는다 라는 뜻이라는 거죠.
예를 들어 보면, 이런거죠.
class Person { ... };
class Student : public Person { ... };

void eat (const Person& p); // 먹는 것은 누구든 합니다.
void study (const Student& s); // 공부는 학생만 합니다.

Person p;
Student s;

eat(p); // 문제없습니다. p는 Person이니까요.
eat(s); // 문제없습니다. s는 Student이고, Student는 Person의 일종이니까요.

study(s); // 문제없습니다.
study(p); // 에러입니다! p는 Student가 아닙니다.
이 이야기는 public 상속에서만 통하는 거에요.