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 |