Inheritance(μμ)
- C++μμ μμμ μ©μ΄
base class (superclass : λΆλͺ¨ ν΄λμ€)
derived class (subclass : μμ ν΄λμ€)
ex)
Personμ΄ base class μ΄κ³ , studentκ° derived classμ΄λ€. μμμμ κ°μ΄ νμνλ©΄ μμμ λ°λλ€λ κ²μ μλ―Ένλ€.
Personμμ μ μν ν¨μλ€μ Student ν΄λμ€κ° νΈμΆνμ¬ μ¬μ©νλ κ²μ΄ κ°λ₯ν΄μ§λ€.
+ μμμ νΉμ§ : μ λ©€λ²μ μΆκ°
derived class(μμ ν΄λμ€)λ μμ λ§μ μλ‘μ΄ λ©€λ²λ€μ μ μν μ μλ€.
κ°μμ±(visibillity)
(1) Public Inheritance
μμν΄λμ€λ λΆλͺ¨ν΄λμ€λ₯Ό publicμΌλ‘ μμ (ex 맨 첫 μμ μμμ class Student : public Person)
- λΆλͺ¨ ν΄λμ€μ public λ©€λ²λ μμ ν΄λμ€μμ publicμΌλ‘ μ μ§λλ€. μμ ν΄λμ€μ κ°μ²΄λ₯Ό ν΅ν΄ μΈλΆμμ μ κ·Όν μ μλ€.
- λΆλͺ¨ ν΄λμ€μ protected λ©€λ²λ μμ ν΄λμ€μμ protectedλ‘ μ μ§λλ€. μμ ν΄λμ€ λ΄λΆμμ μ κ·Ό κ°λ₯νμ§λ§, μΈλΆμμλ μ κ·Όν μ μλ€.
- λΆλͺ¨ ν΄λμ€μ private λ©€λ²λ μμ ν΄λμ€μμ μ κ·Όν μ μμ΅λλ€. μμ ν΄λμ€ λ΄λΆμμλ μ κ·Όμ΄ λΆκ°λ₯ν©λλ€.
Is-A κ΄κ³: Public μμμ "Is-A" κ΄κ³λ₯Ό λνλΌ μ μλ€. μ¦, Student ν΄λμ€λ Person ν΄λμ€μ μΌμ’ μ΄λΌκ³ λ§ν μ μλ€ μλ₯Ό λ€μ΄, Student κ°μ²΄λ Person κ°μ²΄λ‘ μ·¨κΈλ μ μλ€. (νμν΄λμ€λ κΈ°λ³Έν΄λμ€μ μλΈνμ μ΄λ©° Student ν΄λμ€λ Person ν΄λμ€κ° μ¬μ©λλ μ΄λ κ³³μμλ μ¬μ©λ μ μλ€.) But, (Studentλ₯Ό PersonμΌλ‘ λ€λ£¨λ©΄ νλ‘κ·Έλ¨μ μ»΄νμΌ λκ³ μ€νλμ§λ§, Student ν΄λμ€μλ§ μλ μΆκ°μ μΈ λ©€λ²λ μ¬μ©ν μ μλ€. μ΄κ²μ λ€νμ±(polymorphism)μ νΉμ§ μ€ νλλ‘, μμ ν΄λμ€(κΈ°λ³Έ ν΄λμ€)λ‘ λ€λ£° λλ μμ ν΄λμ€μ μ μλ λ©€λ²λ§ μ κ·Όν μ μλ€λ κ²μ μλ―Ένλ€)
(2) Private Inheritance
μμν΄λμ€λ λΆλͺ¨ν΄λμ€λ₯Ό privateμΌλ‘ μμ (ex 맨 첫 μμ μμμ class Student : private Person)
- λΆλͺ¨ ν΄λμ€μ public λ©€λ²λ μμ ν΄λμ€μμ privateμΌλ‘ λ³νλλ€. μμ ν΄λμ€μ κ°μ²΄λ₯Ό ν΅ν΄ μΈλΆμμ μ κ·Όν μ μλ€.
- λΆλͺ¨ ν΄λμ€μ protected λ©€λ²λ μμ ν΄λμ€μμ privateμΌλ‘ λ³νλλ€. μμ ν΄λμ€ λ΄λΆμμλ μ κ·Ό κ°λ₯νμ§λ§, μΈλΆμμλ μ κ·Όν μ μλ€.
- λΆλͺ¨ ν΄λμ€μ private λ©€λ²λ μμ ν΄λμ€μμ μ κ·Όν μ μλ€. μμ ν΄λμ€ λ΄λΆμμλ μ κ·Όμ΄ λΆκ°λ₯νλ€.
Has-A κ΄κ³: Private μμμ "Has-A" κ΄κ³λ‘ λ³Ό μ μλ€. μ¦, Studentλ Personμ ν¬ν¨νκ³ μμ§λ§, Studentκ° Personμ΄λΌλ μλ―Έλ μλλ€
(3) Private Inheritance
μμν΄λμ€λ λΆλͺ¨ν΄λμ€λ₯Ό protectedλ‘ μμ (ex 맨 첫 μμ μμμ class Student : protected Person)
- λΆλͺ¨ ν΄λμ€μ public λ©€λ²λ μμ ν΄λμ€μμ protectedλ‘ λ³νλλ€. μΈλΆμμ μ κ·Όν μ μκ³ , μμ ν΄λμ€ λ° κ·Έ νμ ν΄λμ€μμ μ κ·Ό κ°λ₯νλ€.
- λΆλͺ¨ ν΄λμ€μ protected λ©€λ²λ μμ ν΄λμ€μμ protectedλ‘ μ μ§λλ€. μμ ν΄λμ€ λ° κ·Έ νμ ν΄λμ€μμ μ κ·Ό κ°λ₯νλ€.
- λΆλͺ¨ ν΄λμ€μ private λ©€λ²λ μμ ν΄λμ€μμ μ κ·Όν μ μλ€. μμ ν΄λμ€ λ΄λΆμμλ μ κ·Όμ΄ λΆκ°λ₯νλ€.
Is-Implemented-In-Terms-Of κ΄κ³: Protected μμμ μΌλ°μ μΌλ‘ "Is-Implemented-In-Terms-Of" κ΄κ³λ‘ μ΄ν΄ν μ μλ€. μ¦, Studentλ λ΄λΆμ μΌλ‘ Personμ κΈ°λ₯μ μ¬μ©ν΄ ꡬνλμ§λ§, μΈλΆμμ 보기μ Studentλ Personμ΄ μλλ€
Inheritance(μμ)κ³Ό Overloading(μ€λ²λ‘λ©)
- μ€λ²λ‘λ©μ λμΌν ν΄λμ€ λ΄μμ μ΄λ£¨μ΄μ§. μ¦, κ°μ μ΄λ¦μ μ¬λ¬ ν¨μκ° κ°μ ν΄λμ€μ μ μλμ΄ μμ λ, κ° ν¨μμ μκ·Έλμ²(맀κ°λ³μμ νμ κ³Ό κ°μ)κ° λ€λ₯΄λ©΄, C++ μ»΄νμΌλ¬λ μ΄λ₯Ό ꡬλ³νμ¬ μ¬μ©ν μ μλ€.
- κ·Έλ¬λ, μμλ λ©€λ² ν¨μμ λν΄ μ€λ²λ‘λ©μ μλν λ λ¬Έμ κ° λ°μν μ μλ€. νμ ν΄λμ€μμ κΈ°λ³Έ ν΄λμ€μ ν¨μ μ΄λ¦μ λμΌνκ² μ¬μ©νμ¬ μλ‘μ΄ ν¨μ(μ€λ²λ‘λ©)λ₯Ό μ μν λ, κΈ°λ³Έ ν΄λμ€μ μλ λμΌν μ΄λ¦μ ν¨μλ€μ νμ ν΄λμ€μ λ²μμμ κ°λ €μ§ μ μλ€.
=> μλμ κ°μ΄ μμ ν΄λμ€ μμμμ μμλ λ©€λ² ν¨μμ λν μ€λ²λ‘λ©μ΄ μ μ©λμ§ μλλ€
class Base {
public:
void foo(int x) {
std::cout << "Base::foo(int)" << std::endl;
}
};
class Derived : public Base {
public:
void foo(double x) {
std::cout << "Derived::foo(double)" << std::endl;
}
};
μ€λ²λ‘λ©μ΄ μ μ©λλ €λ©΄??
- λ§μ½ μμλ λ©€λ² ν¨μλ€κ³Ό ν¨κ» μ€λ²λ‘λ©μ μ λλ‘ μ μ©νκ³ μΆλ€λ©΄, κΈ°λ³Έ ν΄λμ€μ ν¨μλ₯Ό νμ ν΄λμ€μ λ²μλ‘ κ°μ ΈμμΌ νλ€. μ΄λ₯Ό μν΄ ***using ν€μλ***λ₯Ό μ¬μ©ν μ μλ€.
class Derived : public Base {
public:
using Base::foo; // Base ν΄λμ€μ foo(int)λ₯Ό κ°μ Έμ΄
void foo(double x) {
std::cout << "Derived::foo(double)" << std::endl;
}
};
μ΄λ κ² νλ©΄, Derived ν΄λμ€μμ foo(int)μ foo(double) λͺ¨λ μ€λ²λ‘λ©λμ΄ μ¬μ©λ μ μλ€.
ν νλ¦Ώκ³Ό μμ (Class Template : Inheritance)
ν΄λμ€ ν νλ¦Ώμ΄λ ν΄λμ€λ μλ‘ μ΄λ€ μ‘°ν©μΌλ‘λ μμλ¨
ν΄λμ€ ν νλ¦Ώμ μμ λ°μ λ μ μ½μ΄ μμ
- νμ ν΄λμ€μμ κΈ°λ³Έ ν΄λμ€μ λ©€λ² ν¨μλ λ©€λ² λ³μλ μλμΌλ‘ μ΄μ©ν μ μμ
- μΈ κ°μ§ ν΄κ²°μ± μ΄ μμ
1) this ν¬μΈν°λ‘ λ©€λ² ν¨μ νΈμΆμ νμ νκΈ° ex) this -> Func() ;
2) usingμΌλ‘ λ©€λ² ν¨μ μ§μ ex) using base<T>::Func ;
3) κΈ°λ³Έ ν΄λμ€μ λ©€λ² ν¨μλ₯Ό μ§μ νΈμΆ ex) Foo<T>::Func() ;
'C Programming Language > C++' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
C++ μμΈ(Exception) μ²λ¦¬(Handling) : throw, try, catch (0) | 2024.09.06 |
---|---|
C++ μ μΊμ€ν , λ€νμ±, λ€μ€ μμκ³Ό κ°μ μμ, κ°μ ν¨μ (2) | 2024.09.04 |
C++ ν΄λμ€(Class)μ μ’ λ₯μ μΆμ ν΄λμ€(abstract classes) (0) | 2024.08.31 |
C++ Generic Programming : ν νλ¦Ώ(Templates) (0) | 2024.08.31 |
C++ μ°μ°μ μ€λ²λ‘λ©(Operator Overloading) (0) | 2024.08.31 |