반응형
final
final 키워드로 클래스 상속을 막을 수 있습니다. 또한, 상속받은 클래스를 final 키워드로 추가 상속을 막을 수 있습니다. final 키워드로 함수 상속을 막을 수 있습니다.
클래스나 가상 함수를 파생 클래스에서 오버라이딩 못 하도록하려면 final 키워드를 사용합니다. 컴파일 도중에 확인이 가능합니다. 당연히 가상 함수가 아니면 쓸 수 없습니다.
override
실제 오버라이드인지 아닌지를 지정해주어서, 명확하게 구현이 가능해지게 해줍니다.
잘못된 가상 함수 오버라이딩 막으려면 override 키워드를 사용합니다. 당연히 가상 함수가 아니면 쓸 수 없습니다. 컴파일 도중에 해당 문제들을 잘 잡아줍니다.
#pragma once
#include <string>
namespace samples
{
class Human
{
public:
Human() = delete;
Human(const char* name);
virtual ~Human() = default;
virtual void SayMyName() const;
protected:
std::string mName;
};
}
#include <iostream>
#include "Human.h"
using namespace std;
namespace samples
{
Human::Human(const char* name)
: mName(std::string(name))
{
}
void Human::SayMyName() const
{
cout << "My name is: " << mName << endl;
}
}
#pragma once
#include "Human.h"
namespace samples
{
class Pope final : public Human
{
public:
Pope();
Pope(const Pope& otherPope) = delete;
virtual ~Pope() override = default;
virtual void SayMyName() const override;
// Compile error
// void Scream() const override;
};
}
#include <iostream>
#include "Pope.h"
using namespace std;
namespace samples
{
Pope::Pope()
: Human::Human("Pope")
{
}
void Pope::SayMyName() const
{
cout << "I'm " << mName << "!!" << endl;
}
}
실제 override 예제가 잘 구현되어있는 코드가 제공되고 있었습니다. 해당 방식을 토대로 좋은 예를 활용하도록 하겠습니다.
반응형
'SW > C++' 카테고리의 다른 글
C++ : nullptr 과 null : 간단한 차이점, 사용 방법, 예제 (0) | 2020.04.11 |
---|---|
C++ : offsetof : 예제, 활용법, 장점, 사용방법 (0) | 2020.04.10 |
C++ : default 와 delete : 사용방법, 활용방법, 장점 (0) | 2020.04.08 |
C++ : static_assert : 예제 및 활용 방법 : 참조용 (0) | 2020.04.07 |
C++ : static_assert 와 assert : 차이점, 활용법, 적용 방법 (0) | 2020.04.06 |