C++복습

C++복습) Modern C++/ override , final

PJNull 2021. 12. 28.
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
반응형

댓글