SW/C++

C++ : final, override : 사용방법, 예제, 개념, 활용방법

얇은생각 2020. 4. 9. 07:30
반응형

final, override

 

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 예제가 잘 구현되어있는 코드가 제공되고 있었습니다. 해당 방식을 토대로 좋은 예를 활용하도록 하겠습니다. 

반응형