[C++] OOP μ†Œλ©Έμžμ˜ virtual ν‚€μ›Œλ“œ

2020. 6. 1. 21:16Β·πŸ“ Language/✏ C & C++
객체지ν–₯의 νŠΉμ„± 쀑 λ‹€ν˜•μ„±μ˜ κ°œλ…μ„ μ μš©ν•œ 것이닀.
λ‹€ν˜•μ„±μ€ 각각의 객체λ₯Ό κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄ ν•¨μˆ˜μ— 쓰기도 ν•˜μ§€λ§Œ μ†Œλ©Έμžμ—λ„ μ‚¬μš©λœλ‹€.

 

클래슀 λ‚΄ μ†Œλ©Έμžμ—λŠ” μ™œ virtual ν‚€μ›Œλ“œκ°€ λΆ™μ„κΉŒ?

λ¨Όμ €, μƒμ†μ—λŠ” 3κ°€μ§€ 관계가 μ‘΄μž¬ν•œλ‹€.

  • is-a: 데이터 ν˜•μ€ λΆ€λͺ¨ 클래슀둜 μ„ μ–Έν•˜κ³  생성은 μžμ‹ 클래슀둜 ν• λ‹Ήν•œλ‹€.
    • λΆ€λͺ¨ 클래슀의 λ³€μˆ˜μ™€ ν•¨μˆ˜λ§Œ ν˜ΈμΆœν•  수 μžˆλ‹€.
    • λ§Œμ•½, μžμ‹ ν΄λž˜μŠ€μ— Override ν•œ ν•¨μˆ˜κ°€ μ‘΄μž¬ν•œλ‹€λ©΄ κ·Έ ν•¨μˆ˜λŠ” 호좜 κ°€λŠ₯ν•˜λ‹€.
  • has-a: μ†Œμœ κ΄€κ³„λ‘œμ„œ λ‹€λ₯Έ 객체λ₯Ό ν¬ν•¨ν•˜μ—¬ κ·Έ 객체의 κΈ°λŠ₯(λ³€μˆ˜, ν•¨μˆ˜)을 μ‚¬μš©ν•œλ‹€.
    • 생성 μ‹œ 상속받은 λΆ€λͺ¨ ν΄λž˜μŠ€λΆ€ν„° ν˜ΈμΆœν•˜κ³  μ†Œλ©Έ μ‹œ μžμ‹ ν΄λž˜μŠ€λΆ€ν„° ν˜ΈμΆœλœλ‹€.
  • is implemented of
#include <iostream>
using namespace std;

class Has {
public:
	Has() {
		cout << "Has μƒμ„±μž" << endl;
	}
	~Has() {
		cout << "Has μ†Œλ©Έμž" << endl;
	}
};

class Base {
private:
	Has* h; // has-a 상속
public:
	Base() {
		h = new Has();
		cout << "Base μƒμ„±μž" << endl;
	}
	~Base() {
		delete h;
		cout << "Base μ†Œλ©Έμž" << endl;
	}
};

class Derived : public Base {
public:
	Derived() {
		cout << "Derived μƒμ„±μž" << endl;
	}
	~Derived() {
		cout << "Derived μ†Œλ©Έμž" << endl;
	}
};

int main()
{
	Base* b1 = new Base();
	Base* b2 = new Derived(); // is-a 상속
	//Derived* d = new Base(); μ‹€ν–‰λ˜μ§€ μ•ŠλŠ”λ‹€.

	delete b1;
	delete b2;
}


// 좜λ ₯
// Has μƒμ„±μž // b1
// Base μƒμ„±μž // b1
// Has μƒμ„±μž // b2
// Base μƒμ„±μž // b2
// Derived μƒμ„±μž // b2
// Has μ†Œλ©Έμž // b1
// Base μ†Œλ©Έμž // b1
// Has μ†Œλ©Έμž // b2
// Base μ†Œλ©Έμž // b2

 

is-a에 μ£Όλͺ©ν•˜μž

생성할 λ•ŒλŠ” Base, Derived의 μƒμ„±μžλ₯Ό λͺ¨λ‘ ν˜ΈμΆœν•˜μ§€λ§Œ μ†Œλ©Έν•  λ•ŒλŠ” Base의 μ†Œλ©Έμžλ§Œ ν˜ΈμΆœλœλ‹€. μ΄λŸ¬ν•œ λ¬Έμ œλŠ” λ©”λͺ¨λ¦¬ λˆ„μˆ˜μ˜ 원인이 λœλ‹€.

 

잠깐, b1, b2 κ°μ²΄λŠ” μ™œ λ‘˜ λ‹€ Base* 데이터 ν˜•μœΌλ‘œ λ°›μ„κΉŒ?

μ–΄λ–€ ν•¨μˆ˜ λ‚΄μ—μ„œ 인자둜 μž…λ ₯받은 객체가 μ–΄λŠ 클래슀의 객체인지 λͺ¨λ₯Έλ‹€λ©΄ λΆ€λͺ¨ 클래슀둜 μ„ μ–Έν•˜λŠ” 게 μ’‹λ‹€. 인자λ₯Ό λΆ€λͺ¨ 클래슀둜 λ°›μ§€ μ•ŠλŠ”λ‹€λ©΄ if 문으둜 λͺ¨λ“  객체λ₯Ό ꡬ뢄해야 ν•œλ‹€.

 

#include <iostream>
using namespace std;

class Base {
public:
	Base() {
		cout << "Base μƒμ„±μž" << endl;
	}
	virtual ~Base() {
		cout << "Base μ†Œλ©Έμž" << endl;
	}
};

class Derived : public Base {
public:
	Derived() {
		cout << "Derived μƒμ„±μž" << endl;
	}
	virtual ~Derived() {
		cout << "Derived μ†Œλ©Έμž" << endl;
	}
};

int main()
{
	Base* b1 = new Base();
	Base* b2 = new Derived();

	delete b1;
	delete b2;
}

// 좜λ ₯
// Base μƒμ„±μž // b1
// Base μƒμ„±μž // b2
// Derived μƒμ„±μž // b2
// Base μ†Œλ©Έμž // b1
// Derived μ†Œλ©Έμž // b2
// Base μ†Œλ©Έμž //b2

 

μ†Œλ©Έμžμ— virtual ν‚€μ›Œλ“œλ₯Ό μΆ”κ°€ν•˜λ‹ˆ μ •μƒμ μœΌλ‘œ ν˜ΈμΆœλœλ‹€!

 

 

https://makefortune2.tistory.com/243?category=695910

 

[λ‚΄κ°€ 받은 C++ κΈ°μˆ λ©΄μ ‘ μ§ˆλ¬Έλ“€] - μ†Œλ©Έμžμ˜ virtual ν‚€μ›Œλ“œ (2)

- 객체지ν–₯의 3κ°€μ§€ νŠΉμ§•μΈ λ‹€ν˜•μ„±μ˜ 기초의 이해λ₯Ό λ¬»λŠ” μ•„μ£Ό 많이 λ“€μ—ˆλ˜ 질문. μ™œ λ‹€ν˜•μ„±μ„ κ°€μ§„ C++ 클래슀의 μ†Œλ©Έμžμ—λŠ” virtual ν‚€μ›Œλ“œλ₯Ό λΆ™μΌκΉŒ? (λ‹€ν˜•μ„±μ„ κ°€μ§€μ§€ μ•ŠλŠ”λ‹€λ©΄ λ³„λ‘œ 상관없닀. v

makefortune2.tistory.com

μ €μž‘μžν‘œμ‹œ (μƒˆμ°½μ—΄λ¦Ό)
'πŸ“ Language/✏ C & C++' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [C++] l-value와 r-value
  • [C/C++] malloc()κ³Ό new의 차이
  • [C++] 정적(Static) 멀버 λ³€μˆ˜μ™€ ν•¨μˆ˜
  • [C++] 얕은 볡사(Shallow Copy)와 κΉŠμ€ 볡사(Deep Copy)
Blxxming
Blxxming
CS 지식과 κ³΅λΆ€ν•˜λ‹€ 배운 것, κ²½ν—˜ν•œ 것 등을 κΈ°λ‘ν•˜λŠ” λΈ”λ‘œκ·Έμž…λ‹ˆλ‹€.
  • Blxxming
    πŸ’‘λ²ˆλœ©πŸ’‘
    Blxxming
  • 전체
    였늘
    μ–΄μ œ
  • 곡지사항

    • Tech Interview
    • πŸ“š Tech (246)
      • πŸ“ Computer Science (96)
        • ✏ OS (12)
        • ✏ Network & Web (10)
        • ✏ Database (11)
        • ✏ Data Structure (6)
        • ✏ Algorithm (40)
        • ✏ Design Pattern (9)
        • ✏ Cloud Computing (3)
        • ✏ (5)
      • πŸ“ Language (73)
        • ✏ Language (6)
        • ✏ C & C++ (11)
        • ✏ C# (19)
        • ✏ JAVA (37)
      • πŸ“ Game (43)
        • ✏ Computer Graphics (2)
        • ✏ Unity (14)
        • ✏ Unreal (26)
        • ✏ (1)
      • πŸ“ Book (34)
        • ✏ Effective (3)
        • ✏ Game Server (16)
        • ✏ Clean Code (14)
        • ✏ (1)
  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.0
Blxxming
[C++] OOP μ†Œλ©Έμžμ˜ virtual ν‚€μ›Œλ“œ
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”