멤버함수
Cat 클래스는 Animal 클래스를 상속해서 만들었다.
myCat과 yourCat 오브젝트는 각각의 메모리 영역을 가진다(그림 참조)
그러면 과연 멤버함수 GetName은 어디에 존재할까?
myCat과 yourCat의 멤버변수처럼 각각 존재하는건지, 아니면 하나만 존재하는건지 헷갈린다.
정답은 각각 존재하지 않고 하나만 존재한다. 위치는 메모리의 코드섹션에 존재하며, 각 멤버 함수는 컴파일 시 딱 한번만 메모리에 할당된다. 그리고 저수준에서는 클래스의 멤버함수는 사실 전역함수와 같다.
C언어에서 전역함수인데 매개변수로 구조체를 받는 함수가 있다고 가정하면 C++에서 멤버함수는 전역함수에 속하고 매개변수는 구조체 대신 오브젝트의 포인터(주소)가 된다.
myCat, yourCat 오브젝트가 GetName 메소드를 실행하면 코드섹션에 0x0A16C7주소에 있는 함수를 실행하는 것을 확인할 수 있다.
그리고 GetName 메소드는 매개변수로 Cat*를 받는다. 그 포인터로 멤버변수에 접근한다는 말.. 멤버변수는 각각의 메모리공간을 가지니깐!
'C++' 카테고리의 다른 글
C++ iterator 개념 (0) | 2020.04.17 |
---|---|
C++ 정적 바인딩, 동적 바인딩 (1) | 2020.04.09 |
C++ 객체 생성 (0) | 2020.04.02 |
C++ 임시객체(이동 생성자) 중요! (0) | 2020.02.07 |
C++ 대입 연산자 (0) | 2020.02.02 |