프로그래밍/c++

c++11에 추가된 override 키워드와 필요성

제페 2015. 7. 13. 00:13
반응형

Session을 상속받는 MySession이라는 클래스가 있다고 하자.


MySession 클래스는 Session의 OnReceive 함수를 재정의 하려고 했다.


1
2
3
4
5
6
7
class MySession : public Session
{
public:
    virtual void OnReceive()
    {
    }
};
cs


하지만 Session의 OnReceive의 정의는 이와 달랐다. 


1
2
3
4
5
6
7
class Session
{
public:
    virtual void OnReceive(const void* buffer, size_t bytes)
    {
    }
};
cs


이 경우 OnReceive는 Session의 OnReceive 재정의가 아닌, MySession 클래스에서 새롭게 정의된 가상함수로 인식을 한다. 


C++11부턴 프로그래머의 이와 같은 실수를 예방하고자 override 키워드가 도입이 되었는데


1
2
3
4
5
6
7
class MySession : public Session
{
public:
    virtual void OnReceive() override
    {
    }
};
cs


위와 같이 사용을 할 수 있다. override 키워드를 붙이면 override함수가 아닐 시에는 컴파일 단에서 오류를 잡아준다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Session
{
public:
    virtual void OnReceive(const void* buffer, size_t bytes)
    {
    }
};
 
 
 
class MySession : public Session
{
public:
 
    virtual void OnReceive() override // error!
    {
    }
 
    virtual void OnReceive(const void* buffer, size_t bytes) override // ok!
    {
    }
};
cs


반응형