[C++/Syntax] 상속 etc…

클래스 내 함수

클래스 내의 함수는 실제로 클래스 안에 있을까?

이 물음에 대한 답변은 함수 포인터에 대한 개념이 필요한데,
각각의 클래스 안엔 함수를 가르키는 포인터가 존재해 메모리에 상주하는 함수를 불러오는 것이다.

하지만 이는 C에서 struct를 통해 구현 가능한 것이다. 
즉, C++은 동작 방식이 다른데 이 방식이 바로 “가상함수”때문이다.

가상함수는 가상함수 테이블을 통해 동작이 이루어지는데,
key엔 클래스,함수 정보가 담겨있고 key가 가르키는 value엔 함수를 가르키는 포인터가 담겨 있다.

이 테이블에서 함수 포인터를 통해 함수를 불러오기에 C에 비해 속도가 떨어지지만, 
그 차이가 미미하고 이를 통해 얻을 수 있는 이득이 크기에 사용된다.

 

다중상속

“일반적인 경우에서 다중상속은 다양한 문제를 동반한다. 따라서 가급적 사용해선 안된다. 하지만 예외적으로 매우 제한적인 사용까지 부정할 필욘없다”

쓰지 말란다.

문법은 아래와 같다.

class son : public dady, public mom { ... }

즉 dady 클래스와 mom 클래스를 다중으로 상속하고 있다.
이때 모호성이 발생 할 수 있는데, 만약 dady와 mom이 person에서 상속받는다면 누구의 person속성을 받아야 할지 모호해진다는 것이다.
이를 죽음의 다이야몬드라고 한다. 자세한건 나무위키를 보자

카테고리C++

글의 문제가 있다면 댓글을 달아 주세요.

This site uses Akismet to reduce spam. Learn how your comment data is processed.