: 인터페이스 타입을 통해 실형식 클래스의 함수를 호출하는데 있다.
인터페이스 사용으로 코드 간소화가 가능하다.
: 함수의 정의는 함수의 주소의 유무를 결정하는 것이다.
: 빌드에러는 없다.
: 가상함수를 가지고 있는 클래스를 객체화만 했는데, 링크에러가 발생한다.
이유 : 컴파일 시 컴파일러는 가상함수를 가지고 있는 클래스의 가상함수 테이블을 만들고, 가상함수의 주소들을 저장하게 된다.
하지만, 가상함수를 정의하지 않으면 주소자체가 없으므로 가상함수 테이블에는 저장되지 않는다. 객체를 생성하지 않으면 문제가 되지 않으나,
객체를 생성하면 가상함수 포인터가 가상함수 테이블과 링크가 되는데,
가상함수 테이블의 함수 주소를 찾을 수 없어서 객체를 생성하자마자,
링크에러가 발생하는 것이다.
선언만 되어 있는 친구를 뺀 상태
선언만 되어 잇는 친구와 정의가 되어있는 친구를 함께 사용하면??
: 순서에 중요하지 않다. 정의 안되어 잇는 가상함수를 하나라도 가지고 잇으면 문제다.
객체 생성만 하지 않으면 문제 되지 않는다.
: 파생클래스에서 부모의 함수를 virtual 할 경우, 부모의 가상함수를 사용하지 않으므로 굳이 정의할 필요가 없다.
하지만, 위에서의 문제처럼 부모 클래스의 가상함수도 정의를 해야만 한다는
불필요한 , 비효율적인 문제가 생기는데 이를 해결하기 위해 순수 가상함수라는 개념이 생겼다.
-> 순수 가상함수는 가상함수를 정의할 필요도 없고, 링크에러도 발생하지 않는 친구다!