: 6λ²μ c++11μμ μ°Έμ‘°νμ μ¬κ° μΆκ°λ¨μ λ°λΌ μ¬μ μ κ·μΉμλ μΆκ°λμλ€κ³ ν¨.
μ»΄νμΌλ¬λ μμ κ·μΉμ κ΄ν΄μ μμ§ λͺ»ν¨.
μμμ½λ
: μ§κΈμ κ²½μ°λ Base μ ν¨μλ₯Ό μ¬μ μνλ κ²μ΄ μλλΌ μ¨κΈ°κ³ μλ κ±°μ.
-> μ»΄νμΌλ¬λ μμ§ λͺ»νλ€....
μμ μ½λμμ override ν€μλλ₯Ό μμ±ν΄λ³΄λ©΄, μ»΄νμΌλ¬κ° μ΄??? λ¬Έμ κ° μλλ°
λΌλ κ²μ μΆλ ₯ν¨.
: κ°μ ν¨μ μ¬μ μ μ overrideλ₯Ό λΆμ¬μ μμ ν μ½λλ₯Ό μμ±ν μ μκ² ν¨.
-> λ°©μ΄ μ½λ
- μ΄νν°λΈ λͺ¨λ c++ νλͺ© 12
μμ±ν΄μΌ νλ μ΄μ
: κΈ°λ° ν΄λμ€μ μλ κ°μ ν¨μ μκ·Έλμ²λ₯Ό μ¬μ μν΄μΌ νλλ°,
overrideλ₯Ό ν΅ν΄μ μκ·Έλμ²κ° λ§λμ§λ₯Ό νμΈν μ μλ€.
μλμ Derived ν΄λμ€λ Baseλ₯Ό κΈ°λ°μΌλ‘ νμλ, virtualν μλμλ λ€λ₯΄κ², λμΌν ν¨μμ μ΄λ¦μ λ€λ₯Έ μΈμμκ·Έλμ²λ€μ μ¬μ©ν¨..
Derived ν΄λμ€μμ f1,f2,f3,f4 ν¨μμ overrideλ₯Ό μμ±ν΄λ³΄μλΌ..
- override ν€μλλ₯Ό ν΅ν΄ μ¬μ μ ν¨μ μκ·Έλμ² κ²μ¬λ₯Ό ν¨.
: κ°μν¨μ μ¬μ μλ₯Ό λͺ»νκ² νκ±°λ, νμν΄λμ€λ₯Ό λ§λ€ μ μκ² ν¨.
κ°μν¨μ λ€μ λΆμ΄λ©΄
: νμμ΄μ κ°μν¨μμμλ μ¬μ μ λΆκ°ν¨.
ν΄λμ€ λ€μ λΆμ΄λ©΄
: νμ ν΄λμ€λ₯Ό λ§λ€ μ μμ.
: νμ ν΄λμ€ μͺ½μμ μ΄μ λλ λλ§κ³ μ¬μ μ λͺ»νκ² ν λ
κ°μν¨μ funcμ κ°μ§κ³ μλ aν΄λμ€λ₯Ό λ§λ€μ΄λΌ.
μ€νκ²°κ³Ό
: mainμμ κ°μ²΄ μ¬μ©νμ§λ μμλλ°, finalλ‘ μΈν΄ μ»΄νμΌ μλ¬ λ°μνλ κ²μ
νμΈν μ μλ€.
#include <iostream>
using namespace std;
template<typename T> class Base
{
public:
virtual void foo(const T a)
{
cout << "Base foo" << endl;
}
};
class Derived : public Base<int*>
{
public:
// κ°μ ν¨μ fooλ₯Ό μ¬μ μν΄μ
// "Derived foo" λΌκ³ μΆλ ₯ν΄ λ³΄μΈμ.
// override μ¬μ©νμ§ λ§κ³ .
};
int main()
{
Base<int*>* p = new Derived;
p->foo(0); // "Derived foo"
}
κ²°κ³Ό
: const μ λΆμλλ κ²°κ³Ό λμ΄..