override keyword (C++11)
C++11 λΆν° μ¬μ©ν μ μλ override keywordλ
λͺ
μμ μΌλ‘ μ΄ λ©μλκ° override λμμμ μ리λ ν€μλμ
λλ€.
#include <iostream>
class Person
{
public:
virtual void VirtualMethod()
{
std::cout << "Person's Virtual Method" << std::endl;
}
};
class Student : public Person
{
public:
//virtual void VirtualMethod() override
virtual void VirtualMethod(int parameter) override // compile error
{
std::cout << "Student's Virtual Method" << std::endl;
}
};
int main(int argc, const char * argv[])
{
Student student;
student.VirtualMethod(0);
return 0;
}
μ΄ ν€μλλ κ°μ ν¨μ(virtual function)μλ§ μ¬μ©ν μ μμΌλ©°,
λΆλͺ¨ ν΄λμ€μ κ°μ ν¨μλ₯Ό override νλ κ²½μ°μλ§ μ»΄νμΌμ΄ λλλ‘ ν΄ μ€λλ€.
μμ μμ Person ν΄λμ€μ VirtualMethod λ©μλλ νλΌλ―Έν°κ° μμ΅λλ€.
κ·Έλ¬λ, Student ν΄λμ€μ VirtualMethodμλ νλΌλ―Έν°κ° νλ μ‘΄μ¬ν©λλ€.
μ΄λ¬ν μΌμ΄μ€μμ override ν€μλλ₯Ό λΆμ¬ λμΌλ©΄ overrideκ° μλκΈ° λλ¬Έμ μ»΄νμΌ μλ¬κ° λ©λλ€.
κΈ°μ‘΄μλ νλ‘κ·Έλλ¨Έμ μ€μλ‘ μ€λ²λΌμ΄λ λμ΄μΌ νλ λΆλͺ¨μ λ©μλ μ μμ λ€λ₯΄κ² μ μΈνλ κ²½μ°
μ»΄νμΌ νμμ νμΈμ΄ λμ§ μμμΌλ©°, λ°νμμ 체ν¬νλ κ²λ λμΉκΈ° μ¬μ μ΅λλ€.
C++11 μ΄μμ λ¬Έλ²μ μ¬μ©νλ κ²½μ°, μμ κ°μ΄ override ν€μλλ₯Ό λΆμ¬λμΌλ©΄ μ€μλ₯Ό μ€μΌ μ μμ΅λλ€.
final keyword (C++11)
λ§μ°¬κ°μ§λ‘ C++11 λΆν° μ¬μ©ν μ μλ final keywordλ
λͺ
μμ μΌλ‘ λ μ΄μ μ΄ λ©μλλ₯Ό μ€λ²λΌμ΄λ ν μ μμμ μ리거λ,
λ μ΄μ μμμ ν μ μμμ μ리λ ν€μλμ
λλ€.
#include <iostream>
class Person
{
public:
virtual void VirtualMethod() final
{
std::cout << "Person's Virtual Method" << std::endl;
}
};
class Student final : public Person
{
public:
virtual void VirtualMethod() override // compile error
{
std::cout << "Student's Virtual Method" << std::endl;
}
};
class Employee : public Student // compile error
{
};
int main(int argc, const char * argv[])
{
Student student;
student.VirtualMethod();
return 0;
}
Personμ VirtualMethodμ λν΄ final μ μΈμ΄ λμ΄ μμΌλ―λ‘,
Studentλ VirtualMethodλ₯Ό μ€λ²λΌμ΄λ ν μ μμ΅λλ€.
λν Student classλ final ν΄λμ€λ‘ μ μΈλμμΌλ―λ‘,
Employee classλ Studentλ₯Ό μμ λ°μ μ μμ΅λλ€.