도슐랭스타

C++ - overriding, 가상함수(virtual function) 본문

C++

C++ - overriding, 가상함수(virtual function)

도도.__. 2023. 11. 29. 12:32

#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