728x90
반응형
override/final
override나 final은 다른언어인 Java나 C#과 같은 언어에서는 흔한 문법이지만 C++의 경우 C++11에서 등장하게 된다.
이둘은 가상함수와 연관이 있으며 자주 활용이 된다.
override의 필요성
class OS
{
};
class Admin: public OS
{
virtual void access()
{
cout<<"Admin";
}
};
class User : public Admin
{
/*virtual void access() const
{
cout<<"User";
}재정의(X) const를 붙일경우 따로 관리하기 때문에 재정의가 되지 않는다.*/
virtual void access() //재정의
{
cout<<"User";
}
};
int main()
{
Admin* admin=new User();
admin->access();
OS* os=new User();
os->access();//Error
}
위와 같은 코드와 달리 엄청나게 긴 코드가 상속관계에 있고, access에 virtual이 붙어 있다면 최초로 가상함수를 사용한것이 누구인지 구별하기 힘들수 있다. 이러한 문제점에 의해 나온것이 override문법이다.
override 구현
override는 이 함수가 내것이 아닌 상속받은 함수를 재정의 하고 있다는 것을 알려주는 문법이다.
class OS
{
};
class Admin: public OS
{
virtual void access()
{
cout<<"Admin";
}
};
class User : public Admin
{
virtual void access() override //재정의
{
cout<<"User";
}
};
int main()
{
Admin* admin=new User();
admin->access();
}
이 override가 붙어있음에 따라 User에게 상속한 Admin에게도 access가 있다는 것 또한 알려준다.
final
final의 경우 자신을 끝으로 해당 함수를 더이상 상속하지 않겟다는 문법이다.
class OS
{
virtual void access()
{
cout<<"OS";
}
};
class Admin: public OS
{
virtual void access() final
{
cout<<"Admin";
}
};
class User : public Admin
{
virtual void access()override //Error
{
cout<<"User";
}
};
int main()
{
Admin* admin=new User();
admin->access();
}
위와 같이 final을 붙이게 되면 더이상 User은 access를 상속받지 못하게 된다.
728x90
반응형
'C++복습' 카테고리의 다른 글
C++복습) Modern C++/전달 참조 (0) | 2021.12.30 |
---|---|
C++복습) Modern C++/ 오른값 참조( rvalue)와 std::move (0) | 2021.12.29 |
C++복습) Modern C++/ Delete (0) | 2021.12.26 |
C++복습) Modern C++/ enum class (0) | 2021.12.24 |
C++복습) Modern C++/ Using (0) | 2021.12.22 |
댓글