2022. 5. 7. 12:22γC++
π‘ μΆμ ν΄λμ€
μΆμ ν΄λμ€(abstract class)
: κΈ°λ₯μ΄ κ΅¬μ²΄μ μΌλ‘ μμ±λμ§ μμ ν΄λμ€. μ¦ νλ μ΄μμ μμ κ°μ ν¨μ(pure virtual function)μ μ§λ ν΄λμ€λ₯Ό μ§μΉνλ€.
μμ±νκ³ μ νλ κ°μ²΄λ€μ΄ λ°λμ μ΄λ€ κΈ°λ₯μ κ°μ ΈμΌνλ€λ©΄, κ·Έ κΈ°λ₯μ μΆμ ν΄λμ€μ μμ κ°μ ν¨μλ‘ μμ±ν΄λκ³ , ν΄λΉ ν΄λμ€λ₯Ό μ΄μ©ν΄ λ§λ μμν΄λμ€(μμ±νκ³ μ νλ κ°μ²΄)μμλ μ΄ κ°μ ν¨μλ₯Ό μ¬μ μνμ¬ μ¬μ©ν΄ κΈ°λ₯μ ꡬννλ€.
μΆμ ν΄λμ€λ κ°μ²΄λ₯Ό μμ±νκΈ° μν λͺ©μ μ ν΄λμ€κ° μλλΌ μμμ ν΅ν λ€μν ν΄λμ€μ μμ±μ μν μΈν°νμ΄μ€μΈ μ .
μΆμ ν΄λμ€λ κΈ°λ₯μ΄ μ μλμ§ μμ μμ κ°μ ν¨μλ₯Ό ν¬ν¨νκ³ μκΈ° λλ¬Έμ λΆμμ ν ν΄λμ€λ‘ λ³Ό μ μλ€. λ°λΌμ μΆμ ν΄λμ€μ λν κ°μ²΄λ μμ±λΆκ°λ₯.
#include <iostream>
β
class Test {
private:
int num;
public:
virtual ~Test() {}
virtual void func() = 0;
};
β
int main() {
//COMPILE ERROR!
Test *test = new Test;
}
κ·ΈλΌ μ΄λ»κ² κ°μ²΄λ₯Ό μμ±νμ§? μΆμ ν΄λμ€λ₯Ό μμ λ°μ μμν΄λμ€λ₯Ό λ§λ€κ³ μμν΄λμ€μμ μ€λ²λΌμ΄λ©μ ν΅ν΄ μμ κ°μν¨μλ₯Ό μ€μ λ‘ κ΅¬νν΄μ μΈμ€ν΄μ€ μμ±νλ€.
μΆμ ν΄λμ€μ νμ μ ν¬μΈν°μ μ°Έμ‘°λ μ μΈ κ°λ₯ν¨.
μ ν μ¬ν
- μΆμ ν΄λμ€λ‘ κ°μ²΄ μμ± λΆκ°
- ν¨μμ μΈμλ‘ μ¬μ© λΆκ°
- ν¨μμ λ°ν νμ μΌλ‘ μ¬μ© λΆκ°
- λͺ μμ λ³ν νμ λΆκ°
- μΌλ° λ³μλ λ©€λ² λ³μλ‘ μ¬μ© λΆκ°
μμ
#include <iostream>
β
class Animal {
public:
virtual ~Animal() {} //κ°μ μλ©Έμ μ μΈ
virtual void cry() = 0; //μμ κ°μ ν¨μ μ μΈ
};
β
class Dog : public Animal {
public:
virtual void cry() {
std::cout << "bark!" << std::endl;
}
};
β
class Cat : public Animal {
public:
virtual void cry() {
std::cout << "meaw~" << std::endl;
}
};
β
intmain() {
Cat cat;
Dog dog;
β
cat.cry();
dog.cry();
return (0);
}
'C++' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
Cpp - static, const ν€μλ (0) | 2022.05.20 |
---|---|
Cpp - μμΈμ²λ¦¬ (Exception Handling), try, throw, catch (0) | 2022.05.14 |
Cpp - λ°μΈλ©, λμ λ°μΈλ©, κ°μ μλ©Έμ (0) | 2022.05.06 |
Cpp - μ€λ²λ‘λ©, μ€λ²λΌμ΄λ©, κ°μ ν¨μ (0) | 2022.05.06 |
cpp - μμ, λ€μ€ μμ (0) | 2022.05.04 |