아무거나 개발공부/C++

C++ - class 함수 정의, virtual function

코드 살인마 2021. 6. 21. 14:57
728x90

Class 함수 정의

Class의 멤버 함수를 정의할 때는 내부, 외부로 정의하는 방법이 있다. 코드가 길어지면 외부정의로 정리하는 것이 가독성이 좋다.

예시

class member{  
private:  
int id;  
int name;  
public:  
void print_name(){ // 내부 정의  
  cout << name << endl;  
  }  

}

void member::print_name(){ //외부 정의
}

virtual function

C++은 클래스의 모든 멤버 함수들이 정적으로 연결된다. 만약 자식 부모의 클래스가 같은 함수를 가지게 되고, 부모 클래스의 자료형으로 자식을 호출한다면 원하는 함수를 불러올 수 없을 것이다. 이것에 대한 해결책으로 virtual를 사용한다. 아래는 virtual을 쓰지 않았을 때의 예시이다.

class member{  
public:  
void print_name(){  
cout << "사람" << endl;  
}  
};

class man{  
public:  
void print_name(){  
cout << "남자" << endl;  
}  
};

class woman{  
public:  
void print_name(){  
cout << "여자" << endl;  
}  
};

int main(){  
member *john = new man(); //멤버 자료형에 자식 클래스 할당  
member *alies = new woman();  
john->print_name(); // '남자'를 출력하지 않고 사람을 출력한다.  
alies->print_name(); // 여자'를 출력하지 않고 사람을 출력한다.  
}  

가상 소멸자

부모 클래스의 자료형에 자식 클래스 할당 시 포인터는 부모 클래스의 속성만 가리키게 된다.
즉 delete 시 자식 클래스는 소멸되지 않는다. 이 문제점을 해결하기 위해 부모 클래스의 소멸자를 virtual화 시킨다.

참고 블로그

https://hwan-shell.tistory.com/225

여러 블로그 중 가상함수에 대해 가장 쉽게 이해할 수 있었다.

'아무거나 개발공부 > C++' 카테고리의 다른 글

C++ - SDK와 MFC 프로그래밍  (0) 2021.07.12
C++ - MFC 개요  (0) 2021.07.09
C++ - 전처리기 지시어(조건부 컴파일)  (0) 2021.06.29
C++ - Windows API와 MFC  (0) 2021.06.25
MFC - CRuntimeClass  (0) 2021.06.18