override 와 final 키워드

C++/C++ 2021. 3. 26. 05:33 |

virtual 과 override


 

클래스의 멤버함수를 재정의할 수 있도록 만들 때 사용되는 키워드 virtual

 

부모 클래스의 멤버함수를 재정의할 때 사용되는 키워드 override

struct A {
	virtual void Foo() {

	}
};

struct B :A {
	virtual void Foo() override{

	}
};

B클래스에서 부모클래스 A의 Foo 함수를 재정의 할 경우 override 키워드를 붙여주므로써

개발자에게 함수를 재정의를 했다는 것을 명시해줄 수 있다. ( C++ 11부터 등장, 안붙여도 오류는 없다 )

 

만약 override를 붙이지 않는다면 해당 함수가 재정의된 것인지 원형인지구분이 어려울 것이다.


final


재정의한 함수를 더이상 재정의할 수 없도록 하는 키워드 final

struct A {
	virtual void Foo() {
		std::cout << "This is A's Foo function" << std::endl;
	}
};

struct B :A {
	virtual void Foo() final{
		std::cout << "This is B's Foo function" << std::endl;
	}
};

struct C : B
{
	virtual void Foo() override {
		std::cout << "This is C's Foo function" << std::endl;
	}
};

B클래스에서 final 키워드를 붙여 Foo함수를 재정의하였다.

 

더이상 재정의 하지 않을 최종판이라는 의미이다.

 

위의 코드는 컴파일에러 E1850 을 뱉는다.

C 클래스에서 최종판이 확정된 B클래스의 Foo 함수를 재정의하려 했기 때문이다.

 

'C++ > C++' 카테고리의 다른 글

GCC로 컴파일하기  (0) 2021.04.14
반복자 다루기  (0) 2021.03.26
성능 개선을 위한 가이드  (0) 2021.03.24
inline 키워드  (0) 2021.03.22
noexcept as specifier & operator  (0) 2021.03.19
Posted by Elan
: