NewGen
C++ virtual function 본문
항상 기본이 중요함.
예전에 알았었는데.. 정확히 잘 몰라서 다시 정리하여 기록하여 둠.
요즘은 SWIFT만 한 6-7년 하다보니 C++ 문법이 간간히 헷갈림.
갑자기 C++을 써야할 일이 생겨서 코딩하다가 virtual 함수 를 그냥 무심코 쓰고 있어서 간단히 기본 개념을 정리하여 둠.
virtual : 지정된 키워드임. 따라서 저 단어만 쓰면 안됨.
규칙이 있슴.
- public만 가능
- static 안됨,
- friend 안됨.
- 포인터로만 접근해야 함.
- 리턴타입은 부모클래스이건, 상속받는 클래스이건 동일해야 함. (단 받는 인자는 다를 수 있슴)
- 클래스인 경우 가상생성자는 가능, 소멸자는 안됨.
대강 저런 규칙이 있었슴. 초보시절에는 뭐나 되나싶어서 달달 외웠으나 이해는 못하였슴.
그냥 요즘은 무심코 씀.
주로 쓰는 용도는 함수 만들고, 함수명은 동일하나, 받는 인자형을 다양하게 구현하는 용도로 씀.
class parent {
public:
virtual void func1() {
printf("parent 1");
}
void func2() {
printf("parent 2");
}
virtual void func3() {
print("parent 3");
}
};
class child : public parent {
public:
void func1() {
print("child 1");
}
void func2() {
print("child 2");
}
void func3(int n) {
print("child 3 : %d", n);
}
};
int main() {
parent* pParent;
child cChild;
pParent = &cChild;
pParent->func1();
pParent->func2();
pParent->func3( 3 );
pParent->func3();
return 0;
}
실행하면,
child 1
parent 2
child 3 : 3 <== 인자형을 주면 child클래스 함수 호출.
parent 3 <=== 인자형을 안주면, parent 클래스 함수 호출.
이름과 리턴타입은 동일하게 주어야 하고, 상속해서 쓸대 받는 인자형을 다양하게 구현해서 사용 하면 됨.