일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 팰린드롬 만들기
- NRVO
- 1563
- UnrealEngine5
- DeferredRendering
- algorithm
- C
- C++
- RootMotion
- GeeksForGeeks
- DirectX11
- 티스토리챌린지
- 백준
- winapi
- IFileDialog
- const
- Frustum
- UE5
- UnrealEngine4
- Programmers
- directx
- Unreal Engine5
- softeer
- 2294
- 프로그래머스
- 오블완
- 언리얼엔진5
- RVO
- baekjoon
- 줄 세우기
- Today
- Total
Game Develop
[C++] 상속받은 가상함수에는 virtual,override 생략해도된다. 본문
class Parent
{
public:
Parent() { cout << "부모클래스 기본생성자 호출 !" << endl; }
Parent(const Parent& arg) { cout << "부모클래스 복사생성자 호출 !" << endl; }
~Parent() { cout << "부모클래스 소멸자 호출 !" << endl; }
virtual void Print() { cout << "부모클래스 Print입니다~" << endl; }
};
class Child : public Parent
{
public:
Child() { cout << "자식클래스 기본생성자 호출 !" << endl; }
Child(const Child& arg) {cout << "자식클래스 복사생성자 호출 !" << endl;}
virtual ~Child() { cout << "자식클래스 소멸자 호출 !" << endl; }
void Print() { cout << "자식클래스 Print입니다~" << endl; }
};
int main()
{
Parent* parent = new Child();
parent->Print();
return 0;
}
위의 결과는? 제목에 써놓은 내용을 몰랐더라면, 자식클래스의 Print()함수에 virtual과 override 키워드가 안붙어 있으니, parent의 Print()가 호출될거라고 생각하겠지만...
보다시피 자식클래스의 Print()함수가 잘 호출된다. 사실 나는 override는 생략해도 되는걸 알고 있었는데, virtual까지 생략해도 되는줄은 몰랐다. 포트폴리오 만들 때는 되도록 뭐든간에 명시적으로 선언하는 스타일이라서 전부 virtual과 override를 명시하다보니 이런 부분은 놓쳤었다.
꼭 new 연산자를 통한 동적할당(런타임 중 메모리할당)에만 적용되는건 아니고, 아래처럼 정적할당(컴파일 시 고정된크기의 메모리할당)을 통해서도 가능하다.
Child child;
Parent* parent = (Parent*)&child;
parent->Print();
'C++ > C++' 카테고리의 다른 글
[C++] 클래스의 멤버함수에서, 속한 클래스의 인스턴스에 대해선 private접근 가능하다. (0) | 2022.09.05 |
---|---|
[C++]증감연산자 전위,후위 차이점. (0) | 2022.09.05 |
[C++] Char*와 Char[]의 차이. (0) | 2022.08.17 |
[C++] Delete와 Delete[] 차이. (0) | 2022.07.11 |
[C++]초기화리스트(Initilizer List)를 사용해야하는 경우. (0) | 2022.07.09 |