μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- Python challenge
- μλ° κΈ°μ΄
- λ°±μ€ λ¬μ€νΈ
- Reversing
- Database
- νμ΄μ¬ μκ³ λ¦¬μ¦
- C
- μ€λΌν΄DB
- νμ΄μ¬
- λ°μ΄ν° ν΅μ
- λ°±μ€
- μκ³ λ¦¬μ¦
- Operating System
- λ°μ΄ν°λ² μ΄μ€
- λ¬μ€νΈ
- μλ° κ°λ
- Rust
- java
- data communication
- νμ΄μ¬ μ²Όλ¦°μ§
- ubuntu
- Python
- λ¬μ€νΈ μμ
- λ¬μ€νΈ νλ‘κ·Έλλ° κ³΅μ κ°μ΄λ
- μ΄μ체μ
- μ€λΌν΄
- νμ΄μ¬ μ±λ¦°μ§
- OS
- μλ°
- μ°λΆν¬
Archives
- Today
- Total
ITβs Portfolio
[Lecture] Cpp - Mid Summary λ³Έλ¬Έ
728x90
λ°μν
π» 2023λ Cpp μ€κ°κ³ μ¬ λλΉ μμ μ 리
π [01] Cpp μμ
cppμ κ°μ²΄ μ§ν₯ νΉμ±
- cppλ κ°μ²΄ μ§ν₯ μΈμ΄
μΊ‘μν(Encapsulation)
: λ°μ΄ν°λ₯Ό μΊ‘μλ‘ μΈμ μΈλΆμ μ κ·ΌμΌλ‘λΆν° λ°μ΄ν°λ₯Ό 보νΈνλ κ°μ²΄ μ§ν₯ νΉμ±ν΄λμ€(Class)
: cppμμ μΊ‘μμ μν μ ν¨- κ°μ²΄λ₯Ό μ μνλ ν
κ°μ²΄(Object)
: ν΄λμ€λ₯Ό μ¬μ©ν΄μ λ§λ€μ΄μ§μ€μ²΄(instance)
μμμ±(Inheritance)
: κ°μ²΄λ₯Ό μ μνλ ν΄λμ€ μ¬μ΄μ μμ κ΄κ³λ₯Ό λμ΄, μμ ν΄λμ€μ κ°μ²΄κ° μμ±λ λ μμ ν΄λμ€μ μ μΈλ λ©€λ²λΏ μλλΌ λΆλͺ¨ ν΄λμ€μ μ μΈλ λ©€λ²λ€λ ν¨κ» κ°μ§κ³ μμ±λ¨λ€νμ±(Polymorphism)
: νλμ κΈ°λ₯μ΄ κ²½μ°μ λ°λΌ μλ‘ λ€λ₯΄κ² 보μ΄κ±°λ λ€λ₯΄κ² μλνλ νμ+
μ°μ°μλ μ μ λ§μ μ΄λ λ¬Έμμ΄ μ°κ²°, κ°μ²΄ λνκΈ° λ± νΌμ°μ°μμ λ°λΌ μλ‘ λ€λ₯Έ μ°μ°μ΄ μ΄λ£¨μ΄μ§ =>μ°μ°μ μ€λ³΅(operator overloading)
- κ°μ μ΄λ¦μ ν¨μκ° λ§€κ° λ³μμ κ°μλ νμ
μ΄ λ€λ₯΄λ©΄ μλ‘ λ€λ₯Έ ν¨μλ‘ μΈμλ¨ =>
ν¨μ μ€λ³΅(function overloading)
- λ€νμ±μ μμ κ΄κ³μμλ λνλ¨
- λΆλͺ¨ ν΄λμ€μ ꡬνλ ν¨μλ₯Ό λμΌν μ΄λ¦μΌλ‘ μμ ν΄λμ€μμ λ€λ₯΄κ² ꡬν =>
ν¨μ μ¬μ μ λλ ν¨μ μ€λ²λΌμ΄λ©(function overriding)
- λΆλͺ¨ ν΄λμ€μ ꡬνλ ν¨μλ₯Ό λμΌν μ΄λ¦μΌλ‘ μμ ν΄λμ€μμ λ€λ₯΄κ² ꡬν =>
π [02] Cpp νλ‘κ·Έλλ°μ κΈ°λ³Έ
#include
μ μ²λ¦¬κΈ°(cpp Preprocessor)
μ λν μ§μλ¬Έ- μμ€ νμΌ μ»΄νμΌ μ
ν€λ νμΌμ μ½μ΄ μμ€ νμΌ λ΄λ‘ μ½μ ν κ²μ μ§μν¨
- μμ€ νμΌ μ»΄νμΌ μ
ν€λ νμΌμλ cpp νμ€ μ μΆλ ₯μ μν ν΄λμ€μ κ°μ²΄κ° μ μΈλμ΄ μμ
νλ©΄ μΆλ ₯
cout
κ°μ²΄- μ€ν¬λ¦° μ₯μΉμ μ°κ²°λ cpp
νμ€ μΆλ ₯ μ€νΈλ¦Ό κ°μ²΄(standard output stream object)
- μ€ν¬λ¦° μ₯μΉμ μ°κ²°λ cpp
<<
μ°μ°μμ€νΈλ¦Ό μ½μ μ°μ°μ(stream insertion operator)
- μ€λ₯Έμͺ½ νΌμ°μ°μ λ°μ΄ν°λ₯Ό μΌμͺ½ μ€νΈλ¦Ό κ°μ²΄μ μ½μ
- λ³Έλ
<<
μ°μ°μλ μ μλ₯Ό μΌμͺ½μΌλ‘μννΈ(shift)
νλ cppμ κΈ°λ³Έ μ°μ°μμν€λ νμΌμμ μ¬μ μλμ΄ μ¬μ©λκ³ μμ
namespace
- νλ‘μ νΈλ₯Ό μ¬λ¬ λͺ
μ΄ λλμ΄ κ°λ°νλ κ²½μ° νΉμ λ€λ₯Έ μ¬λμ΄ μμ±ν μμ€ μ½λλ λͺ©μ νμΌμ κ°μ Έμμ μ¬μ©νλ κ²½μ°
μ΄λ¦(identifier)
μ΄ μΆ©λνλ κ²½μ°κ° μκΉ - λ³μ, ν¨μ, ν΄λμ€ λ±μ μ΄λ¦μ΄ μΆ©λνλ κ²μ λ°©μ§νκΈ° μν΄ κ³ μ ν μ΄λ¦ 곡κ°
namespace
ν€μλ λμ - μ΄λ¦ κ³΅κ° μμ± λ°©λ² :
namespace
ν€μλ λ€μ μ€κ΄νΈλ‘ μμ μ§μ ::
: cppμ νμ€ μ°μ°μμΈ λ²μ μ§μ μ°μ°μ
std::
std
: cpp νμ€μμ μ ν νμ€ μ΄λ¦ 곡κ°- λͺ¨λ cpp νμ€ λΌμ΄λΈλ¬λ¦¬λ
std
μ΄λ¦ 곡κ°μ μ μλμ΄ μμ std
λ΄μ μ μλμ΄ μλ ν¨μλ€μ μ¬μ©νλ €λ©΄std::
μ λμ΄λ₯Ό λΆμ¬μ 곡κ°μ λͺ μν΄μ£Όμ΄μΌ ν¨
- λͺ¨λ cpp νμ€ λΌμ΄λΈλ¬λ¦¬λ
std::μ μλ΅κ³Ό using μ§μμ΄
using
: μ΄λ¦ κ³΅κ° μ λμ΄λ₯Ό μλ΅ν μ μλ μ§μμ΄using std::cout
:std
λ΄μ μ μλμ΄ μλcout
ν¨μμ λν΄μλ§ μ λμ΄λ₯Ό μλ΅ν μ μμusing namespace std
:std
λ΄μ μ μλμ΄ μλ λͺ¨λ ν¨μμ λν΄μ μ λμ΄λ₯Ό μλ΅ν μ μμ
ν€ μ λ ₯
cin
κ°μ²΄- ν€λ³΄λμ cpp μμ© νλ‘κ·Έλ¨μ μ°κ²°νλ cpp
νμ€ μ λ ₯ μ€νΈλ¦Ό κ°μ²΄(standard input stream object)
- ν€λ³΄λ μ
λ ₯ κ°λ€μ λͺ¨λ
cin
κ°μ²΄μ μ€νΈλ¦Ό λ²νΌλ‘ λ€μ΄μ€λ©°, μμ© νλ‘κ·Έλ¨μcin
κ°μ²΄λ‘λΆν° μ λ ₯λ ν€ κ°μ λ°μ
- ν€λ³΄λμ cpp μμ© νλ‘κ·Έλ¨μ μ°κ²°νλ cpp
>>
μ°μ°μμ€νΈλ¦Ό μΆμΆ μ°μ°μ(stream extracion operator)
- μΌμͺ½ νΌμ°μ°μμΈ μ€νΈλ¦Ό κ°μ²΄λ‘λΆν° λ°μ΄ν°λ₯Ό μ½μ΄ μ€λ₯Έμͺ½ νΌμ°μ°μμ μ§μ λ λ³μμ μ½μ
<<
μ°μ°μμ λ§μ°¬κ°μ§λ‘ μ μλ₯Ό μννΈνλ cppμ κΈ°λ³Έ μ°μ°μμ΄μ§λ§ μ¬μ μλμ΄ μ¬μ©λ¨
π [03] ν΄λμ€μ κ°μ²΄
κ°μ²΄
- μ€νν¬λννΈμ λ±μ₯νλ κ° μΈλ¬Όλ€, ν
νΈλ¦¬μ€ κ²μμ λμ€λ κ° λΈλ‘λ€, νκΈ νλ‘κ·Έλ¨μ λ©λ΄λ λ²νΌ =>
κ°μ²΄(object)
- κ°μ²΄λ λ©€λ² λ³μμ λ©€λ² ν¨μλ‘ κ΅¬μ±λ¨
- λ©€λ² λ³μ : κ°μ²΄μ
μν(state)
λ₯Ό λνλ΄λ μμ±λ€ - λ©€λ² ν¨μ :
νλ(behavior)
μ ꡬνν μ½λλ€
- λ©€λ² λ³μ : κ°μ²΄μ
- μΈλΆμμ κ°μ²΄μκ² μ΄λ€ μμ μ μμ²νκ±°λ μνλ₯Ό μκ³ μ ν λ, κ°μ²΄ λ΄μ 곡κ°λ λ©€λ² ν¨μλ₯Ό νΈμΆν¨
ν΄λμ€μ κ°μ²΄
ν΄λμ€(class)
:κ°μ²΄(object)
λ₯Ό μ μνλ ν νΉμ μ€κ³λ- ν΄λμ€μ λ©€λ² λ³μμ λ©€λ² ν¨μλ₯Ό μ μΈν¨
- κ°μ²΄λ ν΄λμ€λΌλ νμμ μ°μ΄λ΄μ΄, λ©€λ² λ³μ λ©λͺ¨λ¦¬μ λ©€λ² ν¨μ μ½λλ₯Ό μ€μ κ°μ§κ³ νλ‘κ·Έλ¨μ΄ μ€νλλ λμ μ€μ‘΄νλ
μ€μ²΄ λλ μΈμ€ν΄μ€(instance)
μ
ν΄λμ€ μ μΈ
class A {
private:
int a;
int b;
public:
int get_sum() {
return a+b;
}
};
ν΄λμ€ μ μΈλΆ(class declaration)
μν΄λμ€ κ΅¬νλΆ(class implementation)
μΌλ‘ λΆλ₯class
ν€μλλ‘ μ μΈ- c μΈμ΄μ
ꡬ쑰체(struct)
μ κ°μ΄ κ°λ°μκ° μ μνλ μλ‘μ΄ λ°μ΄ν° νμ μ - μ μΈλΆμμλ λ©€λ² λ³μμ λ©€λ² ν¨μμ μνμ μ μΈν¨
- λ©€λ² λ³μ μ΄κΈ°ν κ°λ₯
- μ κ·Ό μ§μ μ(access specifier)
public
: ν΄λμ€ μΈλΆλ‘λΆν° μ κ·Ό νμ©private
: ν΄λμ€ μΈλΆλ‘λΆν° μ κ·Όμ νμ©νμ§ μμ(Default)protected
: νμ ν΄λμ€μκ² μ κ·Όμ νμ©νκ³ λ€λ₯Έ ν΄λμ€λ μΈλΆ ν¨μμμλ μ κ·Όν μ μμ
- μμ κ°μ΄ ν΄λμ€ μ μΈλΆμμ ν΄λμ€ ν¨μλ₯Ό ꡬνν μλ μμ§λ§ ν΄λμ€μ μ¬μ¬μ©μ μν΄ λ³΄ν΅ λΆλ¦¬νμ¬ μμ±ν¨
class A {
private:
int a;
int b;
public:
int get_sum();
};
int A::get_sum() {
return a+b;
}
- μ μΈλΆμ ꡬνλΆλ₯Ό λΆλ¦¬ν΄μ μ μν μ½λ
- ν΄λμ€ ν¨μ : ν¨μμ λ¦¬ν΄ νμ , ν΄λμ€ μ΄λ¦, λ²μ μ§μ μ°μ°μ, λ©€λ² ν¨μλͺ κ³Ό λ§€κ° λ³μ
μμ±μ
κ°μ²΄λ₯Ό μμ±ν λ κ°μ²΄λ₯Ό μ΄κΈ°νν μ μμ
μμ±μ(constructor)
: ν΄λμ€μμ κ°μ²΄κ° μμ±λ λ μλμΌλ‘ μ€νλλ νΉλ³ν λ©€λ² ν¨μ- κ°μ²΄ μ΄κΈ°ν ν¨μ
μμ±μμ νΉμ§
- μμ±μμ λͺ©μ μ κ°μ²΄κ° μμ±λ λ νμν μ΄κΈ° μμ μ μν¨
- μμ±μ ν¨μλ μ€μ§ ν λ²λ§ μ€νλ¨
- μμ±μ ν¨μμ μ΄λ¦μ ν΄λμ€ μ΄λ¦κ³Ό λμΌνκ² μμ±λμ΄μΌ ν¨
- μμ±μ ν¨μμ μνμ λ¦¬ν΄ νμ μ μ μΈνμ§ μμμΌ ν¨
- μμ±μλ μ€λ³΅ κ°λ₯ν¨
μμ μμ±μ(delegating constructor)
- κΈ°λ³Έ μμ±μμ λ§€κ° λ³μλ₯Ό κ°μ§λ μμ±μλ₯Ό λ°λ‘ μ μνκ² λλ©΄ κ°μ²΄λ₯Ό μ΄κΈ°ννλ λΉμ·ν μ½λκ° μ€λ³΅λ¨
Circle::Circle() : Circle(1) { } Circle::Circle(int r) { radius = r; cout << "λ°μ§λ¦ " << radius << " μ μμ±" << endl; }
- μ€λ³΅λ μ΄κΈ°ν μ½λλ₯Ό νλμ μμ±μλ‘ λͺ°κ³ , λ€λ₯Έ μμ±μμμ μ΄ μμ±μλ₯Ό νΈμΆν μ μκ² ν¨
- κ°μ²΄μ μ΄κΈ°ν μμ
μ΄ μ½λ©λ
Circle(int r)
: νκ² μμ±μ - κ°μ²΄μ μ΄κΈ°νλ₯Ό λ€λ₯Έ μμ±μμ μμνλ
Circle()
: μμ μμ±μ
κΈ°λ³Έ μμ±μ(default constructor)
- ν΄λμ€μ μ μΈλ μ΄λ€ μμ±μλ μμ λ μ»΄νμΌλ¬κ° μλμΌλ‘ μμ±ν΄μ£Όλ μμ±μ
- λ§€κ° λ³μκ° μλ μμ±μ
- μλμΌλ‘ μμ±λλ κ²½μ°
- μμ±μκ° νλλ μλ ν΄λμ€μ κ²½μ°, μ»΄νμΌλ¬κ° 보μ΄μ§ μκ² κΈ°λ³Έ μμ±μλ₯Ό μ½μ ν¨
- μλμΌλ‘ μμ±λμ§ μλ κ²½μ°
- μμ±μκ° νλλΌλ μ μΈλ ν΄λμ€μ κ²½μ°, μ»΄νμΌλ¬λ κΈ°λ³Έ μμ±μλ₯Ό μλ μ½μ νμ§ μμ
μλ©Έμ
- κ°μ²΄κ° μλ©Έλλ©΄ κ°μ²΄ λ©λͺ¨λ¦¬λ μμ€ν μΌλ‘ λ°νλ¨
μλ©Έμ(destructor)
: κ°μ²΄κ° μλ©Έλλ μμ μμ μλμΌλ‘ νΈμΆλλ ν΄λμ€μ λ©€λ² ν¨μ- μλ©Έμμ νΉμ§
- μλ©Έμμ λͺ©μ μ κ°μ²΄κ° μ¬λΌμ§ λ νμν λ§λ¬΄λ¦¬ μμ μ μν¨
- μλ©Έμμ μ΄λ¦μ ν΄λμ€ μ΄λ¦ μμ ~λ₯Ό λΆμ
- μλ©Έμλ λ¦¬ν΄ νμ μ΄ μμΌλ©° μ΄λ€ κ°λ 리ν΄ν΄μλ μ λ¨
- μλ©Έμλ μ€μ§ ν κ°λ§ μ‘΄μ¬νλ©° λ§€κ° λ³μλ₯Ό κ°μ§μ§ μμ
- μλ©Έμκ° μ μΈλμ΄ μμ§ μμΌλ©΄ κΈ°λ³Έ μλ©Έμκ° μλμΌλ‘ μμ±λ¨
μ κ·Ό μ§μ
λ©€λ² μ κ·Ό μ§μ μ(access specifier)
private(λΉκ³΅κ°)
- μ κ·Ό μ§μ μ default
private
μ κ·Ό μ§μ μΌλ‘ μ μΈλ λ©€λ²λ ν΄λμ€ λ΄μ λ©€λ² ν¨μλ€μκ²λ§ μ κ·Όμ΄ νμ©λ¨- λ©€λ² λ³μλ
private
λ‘ μ§μ νλ κ²μ΄ λ°λμ§ν¨
public(곡κ°)
public
μ κ·Ό μ§μ μΌλ‘ μ μΈλ λ©€λ²λ ν΄λμ€ λ΄μΈλ₯Ό λ§λ‘ νκ³ νλ‘κ·Έλ¨μ λͺ¨λ ν¨μλ€μκ² μ κ·Όμ΄ νμ©λ¨- μμ±μλ
public
μΌλ‘ μ§μ ν΄μΌ ν¨
protected(보νΈ)
protected
μ κ·Ό μ§μ μΌλ‘ μ μΈλ λ©€λ²λ ν΄λμ€ λ΄μ λ©€λ² ν¨μμ μ΄ ν΄λμ€λ₯Ό μμλ°μ νμ ν΄λμ€μ λ©€λ² ν¨μμκ²λ§ μ κ·Όμ΄ νμ©λ¨
π [04] κ°μ²΄ ν¬μΈν°μ κ°μ²΄ λ°°μ΄, κ°μ²΄μ λμ μμ±
κ°μ²΄ ν¬μΈν°
Circle *p
: κ°μ²΄μ λν ν¬μΈν° λ³μ μ μΈ- μ무 κ°μ²΄λ κ°λ¦¬ν€κ³ μμ§ μμ
Circle* p = &donut;
: ν¬μΈν° λ³μμ κ°μ²΄ μ£Όμ μ§μ - κ°μ²΄μ μ£Όμλ κ°μ²΄ μ΄λ¦ μμ
&
μ°μ°μλ₯Ό μ¬μ©νμ¬ νν
- κ°μ²΄μ μ£Όμλ κ°μ²΄ μ΄λ¦ μμ
d = donut.getArea();
: κ°μ²΄ μ΄λ¦μΌλ‘ λ©€λ² μ κ·Ό.
μ°μ°μ μ¬μ©
d = p->getArea();
: κ°μ²΄ ν¬μΈν°λ‘ λ©€λ² μ κ·Ό->
μ°μ°μ μ¬μ©d = (*p).getArea();
μ κ°μ
λμ λ©λͺ¨λ¦¬ ν λΉ λ° λ°ν
- c μΈμ΄μμ λμ λ©λͺ¨λ¦¬ ν λΉ λ° λ°νμ
malloc()
κ³Όfree()
λ±μ νμ€ c ν¨μλ₯Ό μ¬μ© - cppμμλ
new
μdelete
μ°μ°μλ₯Ό μ΄μ©new
ν(heap)
곡κ°μμ λ©λͺ¨λ¦¬λ₯Ό ν λΉλ°μ => μμ½μ΄
delete
- ν λΉλ°μ λ©λͺ¨λ¦¬λ₯Ό νμΌλ‘ λ°ν
[data_type] *[pointer_variable] = new [data_type];
delete [pointer_variable];
new
μdelete
κΈ°λ³Έ νμnew
: λ°μ΄ν° νμ μ ν¬κΈ°λ§νΌ νμΌλ‘λΆν° λ©λͺ¨λ¦¬λ₯Ό ν λΉλ°κ³ μ£Όμλ₯Ό 리ν΄ν¨delete
: ν¬μΈν° λ³μκ° κ°λ¦¬ν€λ λ©λͺ¨λ¦¬λ₯Ό νμΌλ‘ λ°ν- ν λ©λͺ¨λ¦¬κ° λΆμ‘±νλ©΄ newλ
NULL
μ λ¦¬ν΄ - λμ μΌλ‘ ν λΉλ°μ§ μλ λ©λͺ¨λ¦¬λ₯Ό
delete
λ‘ λ°ν μ μ€λ₯
[data_type] *[pointer_variable] = new [data_type] [array_size];
delete [] [pointer_variable];
- λ°°μ΄μ λμ μΌλ‘ ν λΉλ°κ³ λ°ννλ
new
μdelete
κΈ°λ³Έ νμ new
: λ°°μ΄μ ν¬κΈ°λ§ν λ°°μ΄μ ν λΉλ°μ μ£Όμλ₯Ό 리ν΄delete
: ν¬μΈν° λ³μκ° κ°λ¦¬ν€λ λ°°μ΄ λ©λͺ¨λ¦¬ λ°ν
κ°μ²΄μ κ°μ²΄ λ°°μ΄μ λμ μμ± λ° λ°ν
[class_name] *[pointer_variable] = new [class_name];
[class_name] *[pointer_variable] = new [class_name](constructor_parameter_list);
new
μ°μ°μλ₯Ό μ΄μ©νμ¬ κ°μ²΄λ₯Ό λμ μμ±νλ ꡬ문new
: ν΄λμ€ ν¬κΈ°μ λ©λͺ¨λ¦¬λ₯Ό ν λΉλ°μ κ°μ²΄λ₯Ό μμ±- μμ±μλ₯Ό νΈμΆ
delete [pointer_variable];
delete
μ°μ°μλ₯Ό μ΄μ©νμ¬ ν¬μΈν° λ³μκ° κ°λ¦¬ν€λ κ°μ²΄λ₯Ό λ°ν
[class_name] *[pointer_variable] = new [class_name] [array_size];
new
μ°μ°μλ₯Ό μ΄μ©νμ¬ κ°μ²΄ λ°°μ΄μ λμ μΌλ‘ μμ±νλ ꡬ문- κ° κ°μ²΄μ λν΄ κΈ°λ³Έ μμ±μκ° νΈμΆλ¨
delete [] [pointer_variable];
delete
μ°μ°μλ₯Ό μ΄μ©νμ¬ λμ μΌλ‘ ν λΉλ°μ λ°°μ΄μ λ°ν
λμ ν λΉ λ©λͺ¨λ¦¬μ λ°ν
ν(heap)
μ νλ‘κ·Έλ¨μ΄ μ€ν μ€μnew
λ₯Ό μ΄μ©νμ¬ λμ μΌλ‘ ν λΉλ°μ μ¬μ©ν μ μλ λ©λͺ¨λ¦¬- λλΆλΆ μ΄μ체μ μμ νλ‘κ·Έλ¨λ§λ€ νμ΄ λ°λ‘ μ£Όμ΄μ§κΈ°μ ν νλ‘κ·Έλ¨μ΄ λμ μΌλ‘ λ§μ λ©λͺ¨λ¦¬λ₯Ό ν λΉλ°λ κ²μ΄ λ€λ₯Έ νλ‘κ·Έλ¨μ νμ μ ν μν₯μ μ£Όμ§ μμ
- ν λΉλ°μ ν νμ μκ² λ λ©λͺ¨λ¦¬λ₯Ό νμ λ°ννμ§ μκ±°λ λ
Όλ¦¬μ μ€λ₯λ‘ μΈν
λ©λͺ¨λ¦¬ λμ(memory leak)
κ° λ°μνλ©΄ νμ λ©λͺ¨λ¦¬κ° λΆμ‘±νμ¬ ν λΉλ°μ§ λͺ»νκ² λ¨λ©λͺ¨λ¦¬ λμ(memory leak)
: λμ μΌλ‘ ν λΉλ°μ λ©λͺ¨λ¦¬μ μ£Όμλ₯Ό μμ΄λ²λ € νμ λ°νν μ μμ λ λ°μ- μ§μμ μΌλ‘ λ°μν κ²½μ° νμ ν¬κΈ°κ° μ€μ΄λ€μ΄ μ€ν μ€ λ©λͺ¨λ¦¬λ₯Ό ν λΉλ°μ μ μλ μ¬κ°ν λ Όλ¦¬μ μ€λ₯κ° λ°μν¨
this ν¬μΈν°
this
- κ°μ²΄ μμ μ λν ν¬μΈν°
- ν΄λμ€μ λ©€λ² ν¨μ λ΄μμλ§ μ¬μ©λ¨
- νμ΄μ¬μ
self
λ λΉμ·ν κ°λ
this
κ° νμν κ²½μ°- λ§€κ° λ³μμ μ΄λ¦μ λ©€λ² λ³μμ λμΌνκ² μ¬μ©νλ κ²½μ°
- κ°μ²΄μ λ©€λ² ν¨μμμ κ°μ²΄ μμ μ μ£Όμλ₯Ό 리ν΄νλ κ²½μ°
- μ°μ°μ μ€λ³΅μ ꡬνν λμ κ²½μ°μ
this
μ μ μ½ μ‘°κ±΄- ν΄λμ€μ λ©€λ² ν¨μμμλ§ μ¬μ©ν μ μμ
- λ©€λ² ν¨μλΌλ
μ μ λ©€λ² ν¨μ(static member function)
λ μ¬μ©ν μ μμ
π [08] μμ
μμμ κ°λ
μμ(Inheritance)
: κ°μ²΄ μ§ν₯ μΈμ΄μ λ³Έμ§μ μΈ νΉμ±- λ ν΄λμ€ μ¬μ΄μ λΆλͺ¨-μμμ μμ κ΄κ³ μ μΈ
- μμ ν΄λμ€μ κ°μ²΄κ° μμ±λ λ, μμ μ λ©€λ²λΏ μλλΌ λΆλͺ¨ ν΄λμ€μ λ©€λ²λ₯Ό ν¬ν¨ν κ²μ μ§μν¨
- λΆλͺ¨ ν΄λμ€ =>
κΈ°λ³Έ ν΄λμ€(base class)
- μμ ν΄λμ€ =>
νμ ν΄λμ€(derived class)
- cppλ μ¬λ¬ κ°μ ν΄λμ€λ₯Ό λμμ μμλ°λ
λ€μ€ μμ(multiple inheritance)
νμ©
- μμμ λͺ©μ κ³Ό μ₯μ
- κ°κ²°ν ν΄λμ€ μμ±
- ν΄λμ€ κ°μ κ³μΈ΅μ λΆλ₯ λ° κ΄λ¦¬μ μ©μ΄ν¨
- ν΄λμ€ μ¬μ¬μ©κ³Ό νμ₯μ ν΅ν μννΈμ¨μ΄μ μμ°μ± ν₯μ
ν΄λμ€ μμκ³Ό κ°μ²΄
class Student : public Person {
};
class StudentWorker : public Student {
};
- Personμ μμλ°λ Studentμ Studentλ₯Ό μμλ°λ StudentWorker μ μΈ
- κΈ°λ³Έ ν΄λμ€ μ΄λ¦ μμ λ°λμ μμ μ κ·Όμ μ§μ ν΄μΌ νλλ°, μ κ·Ό μ§μ μ 3κ° λͺ¨λ μ¬μ© κ°λ₯ν¨
- μμμ νμλ μ νμ΄ μμ
class ColorPoint : public Point {
// Pointλ₯Ό μμλ°λ ColorPointμ μμ μ μΈ
};
int main() {
Point p; // Point νμ
μΈ κΈ°λ³Έ ν΄λμ€ κ°μ²΄ p μμ±
ColorPoint cp; // ColorPoint νμ
μΈ νμ ν΄λμ€ κ°μ²΄ cp μμ±
}
- κ°μ²΄ pλ Point ν΄λμ€μ λ©€λ²λ§ κ°μ§
- κ°μ²΄ cpλ Point λ©€λ²μ ColorPoint λ©€λ² λͺ¨λ κ°μ§
νμ ν΄λμ€μμ κΈ°λ³Έ ν΄λμ€ λ©€λ² μ κ·Ό
- νμ ν΄λμ€λ μμμ ν΅ν΄ κΈ°λ³Έ ν΄λμ€μ λ©€λ²λ₯Ό μμ μ λ©€λ²λ‘ νμ₯
- νμ ν΄λμ€μ λ©€λ²λ€μ κΈ°λ³Έ ν΄λμ€μ
private
λ©€λ² μΈμ λͺ¨λ λ©€λ²λ₯Ό μ κ·Όν μ μμ
κΈ°λ³Έ ν΄λμ€μ private λ©€λ²μ μμκ³Ό μ κ·Ό
- κΈ°λ³Έ ν΄λμ€μ
private
λ©€λ²λ νμ ν΄λμ€μ μμλ¨ - νμ ν΄λμ€μ κ°μ²΄κ° μκΈΈ λ νμ ν΄λμ€μ κ°μ²΄ λ΄μ μμ±λ¨
- μ¦, κΈ°λ³Έ ν΄λμ€μ μ μΈλ
private
λ©€λ²λ νμ ν΄λμ€μ μμλκ³ νμ ν΄λμ€μ κ°μ²΄μλ ν¬ν¨λμ§λ§, νμ ν΄λμ€μ μ΄λ€ ν¨μμμλ μ§μ μ κ·Όμ΄ λΆκ°ν¨
ν΄λμ€ μΈλΆμμ νμ ν΄λμ€μ λ©€λ² νΈμΆ
main()
ν¨μμ κ°μ΄ νμ ν΄λμ€ μΈλΆμμ νμ ν΄λμ€ κ°μ²΄μpublic
λ©€λ²μ κΈ°λ³Έ ν΄λμ€μpublic
λ©€λ²λ₯Ό λͺ¨λ μ κ·Όν μ μμ
π [μΆκ°] λ€νμ±κ³Ό κ°μ ν¨μ
λ€νμ±
λ€νμ±(polymorphism)
: κ°μ²΄λ€μ νμ μ΄ λ€λ₯΄λ©΄ λκ°μ λ©μμ§κ° μ λ¬λλλΌλ μλ‘ λ€λ₯Έ λμμ νλ κ²
κ°μ²΄ ν¬μΈν°μ νλ³ν
class Shape {
protected:
int x, y;
public:
Shape() { cout << "Shape Constructor" << endl; }
~Shape() { cout << "Shape Destructor" << endl; }
void set(int x, int y) {
this->x = x;
this->y = y;
}
void draw() {
cout << "Shape Draw" << endl;
}
};
class Rectangle : public Shape {
private:
int w, h;
public:
Rectangle() { cout << "Rectangle Constructor" << endl; }
~Rectangle() { cout << "Rectangle Destructor" << endl; }
void setWidth(int w) {
this->w = w;
}
void setHeight(int h) {
this->h = h;
}
void draw() {
cout << "Rectangle Draw" << endl;
}
};
class Circle : public Shape {
private:
int r;
public:
void setRadius(int r) {
this->r = r;
}
void draw() {
cout << "Circle Draw" << endl;
}
};
- λΆλͺ¨ ν΄λμ€μΈ Shapeμ Shapeλ₯Ό μμλ°λ μμ ν΄λμ€ Rectangleκ³Ό Circle
int main() {
Shape *ps = new Rectangle();
ps->set(10, 10);
ps->draw();
delete ps;
return 0;
}
μν₯ νλ³ν(upcasting)
: μμ ν΄λμ€ νμ μ λΆλͺ¨ ν΄λμ€ νμ μΌλ‘ λ³ν- Rectangle κ°μ²΄λ₯Ό Shape ν¬μΈν°λ‘ κ°λ¦¬ν€κ³ μλλ° ν¬μΈν° psλ Rectangleμ λ©€λ² ν¨μμ μ κ·Όνμ§ λͺ»νλ©° Shapeμ μ μλ λ©€λ² ν¨μλ§ μ κ·Όν μ μμ
// 1
int main() {
Shape *ps = new Rectangle();
Rectangle *pr = (Rectangle *) ps;
pr->setHeight(10);
pr->draw();
delete pr;
return 0;
}
// 2
int main() {
Shape *ps = new Rectangle();
((Rectangle *)ps)->setHeight(10);
((Rectangle *)ps)->draw();
delete ps;
return 0;
}
νν₯ νλ³ν(downcasting)
: λΆλͺ¨ ν΄λμ€ νμ μ μμ ν΄λμ€ νμ μΌλ‘ λ³ν- Rectangle κ°μ²΄λ₯Ό Shape ν¬μΈν°λ‘ κ°λ¦¬ν€κ³ μλ ν¬μΈν° psλ‘ Rectangleμ λ©€λ² ν¨μμ μ κ·Όν μ μλ λ°©λ²
κ°μν¨μ
class Shape {
protected:
int x, y;
public:
Shape() { cout << "Shape Constructor" << endl; }
virtual ~Shape() { cout << "Shape Destructor" << endl; }
void set(int x, int y) {
this->x = x;
this->y = y;
}
// κ°μ ν¨μ μ μ
virtual void draw() {
cout << "Shape Draw" << endl;
}
};
class Rectangle : public Shape {
private:
int w, h;
public:
Rectangle() { cout << "Rectangle Constructor" << endl; }
~Rectangle() { cout << "Rectangle Destructor" << endl; }
void setWidth(int w) {
this->w = w;
}
void setHeight(int h) {
this->h = h;
}
// μ¬μ μ(μ€λ²λΌμ΄λ©)
void draw() {
cout << "Rectangle Draw" << endl;
}
};
- λΆλͺ¨ ν΄λμ€μΈ Shapeμ Shapeλ₯Ό μμλ°λ μμ ν΄λμ€ Rectangle
- Shapeμ draw ν¨μλ κ°μ ν¨μλ‘ μ μλμμΌλ©° Rectangleμμ μ¬μ μ
int main() {
Shape *ps = new Rectangle();
ps->draw();
delete ps;
return 0;
}
- Shapeμ draw ν¨μκ° μλ μ¬μ μλ Rectangleμ draw ν¨μκ° μ€νλ¨
λ°μΈλ©
μ μ λ°μΈλ©(static binding)
: μ»΄νμΌ λ¨κ³μμ λͺ¨λ λ°μΈλ©μ΄ μλ£λλ κ²- μ»΄νμΌ μκ°μ νΈμΆ ν¨μκ° κ²°μ λ¨
- μλκ° λΉ λ¦
- μΌλ° ν¨μ λμ
λμ λ°μΈλ©(dynamic binding) νΉμ μ§μ° λ°μΈλ©(late binding)
: λ°μΈλ©μ΄ μ€ν μκΉμ§ μ°κΈ°λκ³ μ€ν μκ°μ μ€μ νΈμΆλλ ν¨μλ₯Ό κ²°μ νλ κ²- μ€ν μκ°μ νΈμΆ ν¨μκ° κ²°μ λ¨
- μλκ° λλ¦Ό
- κ°μ ν¨μ λμ
μ°Έμ‘°μμ κ°μ ν¨μ
- μ°Έμ‘°μλ ν¬μΈν°μ λ§μ°¬κ°μ§λ‘ λͺ¨λ κ²μ΄ λμΌνκ² μ μ©λ¨
- λΆλͺ¨ ν΄λμ€μ μ°Έμ‘°μλ‘ μμ ν΄λμ€λ₯Ό κ°λ¦¬ν¬ μ μμΌλ©° κ°μ ν¨μμ λμλ λμΌν¨
κ°μ μλ©Έμ
- λ€νμ±μ μ¬μ©νλ κ³Όμ μμ μλ©Έμλ₯Ό κ°μ ν¨μν ν΄μ£Όμ§ μμΌλ©΄ λ©λͺ¨λ¦¬ λμ λ°μ
- μλ©Έμλ₯Ό κ°μ ν¨μλ‘ μ μΈνλ©΄ λΆλͺ¨ ν΄λμ€μ μλ©Έμ μ€ν μ€ λμ λ°μΈλ©μ μν΄ μμ ν΄λμ€μ μλ©Έμμ λν νΈμΆλ‘ λ³νκ² λ¨
- μμ ν΄λμ€μ μλ©Έμλ μμ μ΄ μ€νλ ν λΆλͺ¨ ν΄λμ€μ μλ©Έμλ₯Ό νΈμΆνλλ‘ μ»΄νμΌλκΈ° λλ¬Έμ λΆλͺ¨ ν΄λμ€μ μμ ν΄λμ€μ μλ©Έμκ° λͺ¨λ μμλλ‘ μ€νλ¨
μμ κ°μ ν¨μ
μμ κ°μ ν¨μ(pure virtual function)
: ν¨μ ν€λλ§ μ‘΄μ¬νκ³ ν¨μμ λͺΈμ²΄λ μλ ν¨μvirtual [return_type] [function_name]([parameters]) = 0;
μΆμ ν΄λμ€
μΆμ ν΄λμ€(abstract class)
: μμ κ°μ ν¨μλ₯Ό κ°μ§κ³ μλ ν΄λμ€- μΆμμ μΈ κ°λ μ νννλλ° μ λΉν¨
728x90
λ°μν
'Development Study > C' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Lecture] Cpp - Finals Summary (0) | 2023.06.13 |
---|---|
[Lecture] Cpp - Assignment (0) | 2023.04.16 |
[C] C & Cpp with Mac Vscode μ°Έκ³ κΈ (0) | 2023.03.05 |
[C] μκ³ λ¦¬μ¦ - λλ€ μ μλ€ μ€ λ λ²μ§Έλ‘ ν° κ° μΆλ ₯νκΈ° (0) | 2020.06.28 |
[C] μκ³ λ¦¬μ¦ - λ¬Έμ₯μ μνλ²³ λΉλμ κ³μ°νκΈ° (0) | 2020.06.26 |