도슐랭스타
C++ - overriding, 가상함수(virtual function) 본문
#include <iostream>
using std::cout;
class Dot {
public:
void draw() { cout << "Dot::draw()\n";}
void print() {
cout << "Dot 클래스\n";
draw();
}
};
class Line :public Dot {
public:
void draw() {
cout << "Line::draw()\n";}
};
int main() {
Line line;
line.print();
return 0;
}
이미 컴파일을 할 때 draw() 함수의 정의를 끝냈기 때문에 재정의가 되지 않는다.
#include <iostream>
using std::cout;
class Dot {
public:
virtual void draw() { cout << "Dot::draw()\n";} //virtual function 사용
void print() {
cout << "Dot 클래스\n";
draw();
}
};
class Line :public Dot {
public:
void draw() {
cout << "Line::draw()\n";}
};
int main() {
Line line;
line.print();
return 0;
}
하지만 virtual 함수를 사용하면 컴파일러가 이 함수는 재정의가 될 수 있음을 알고 정의를 끝내지 않는다.
런타임에 정의힌다.
#include <iostream>
using std::cout;
class Dot {
public:
virtual void draw() { cout << "Dot::draw()\n";}
void print() {
cout << "Dot 클래스\n";
draw();
}
};
class Line :public Dot {
public:
void draw() override { //override를 적기도 함.(안 적어도 됨.)
cout << "Line::draw()\n";}
};
int main() {
Line line;
line.print();
return 0;
}
override를 적기도 한다.(생략 가능)
반응형
'C++' 카테고리의 다른 글
C++ - 바인딩(binding) (1) | 2023.12.06 |
---|---|
C++ - 다중상속의 문제점(다이아몬드 문제) (0) | 2023.12.01 |
C++ - 다중 상속 (0) | 2023.11.29 |
C++ - 상속성 (3) | 2023.11.22 |
C++ - Overloading, Overriding (1) | 2023.11.18 |
Comments