42seoul/projects

[C++] Inheritance ( 상속 ), polymorphism ( λ‹€ν˜•μ„± )

moaoh 2023. 9. 2. 16:38

ν•˜λ‚˜μ˜ νƒ€μž…μ— μ—¬λŸ¬ 객체λ₯Ό λŒ€μž…ν•  수 μžˆλŠ” μ„±μ§ˆ

 

λ‹€ν˜•μ„±μ΄λΌλŠ” κ°œλ…μ„ μ•ŒκΈ°μ „μ— λ‹€ν˜•μ„±κ³Ό λ°€μ ‘ν•˜κ²Œ 관련이 μžˆλŠ” μƒμ†μ΄λΌλŠ” κ°œλ…μ„ 이해면 더 μ‰½κ²Œ μ‚¬μš©ν•  수 μžˆλ‹€.

 

Inheritance ( 상속 )

λΆ€λͺ¨ν΄λž˜μŠ€μ— μžˆλŠ” 멀버 ν•¨μˆ˜λ‚˜ 멀버 λ³€μˆ˜λ“€μ„ λ¬Όλ € λ°›μ•„μ„œ μƒˆλ‘œμš΄ 클래슀λ₯Ό λ§Œλ“œλŠ” 것

class Parent
{
public:
	...
};

class Child : public Parent
{
public:
	...
}

ν΄λž˜μŠ€μ—μ„œλŠ” μœ„μ™€κ°™μ΄ λ‹€λ₯Έ 클래슀λ₯Ό μƒμ†λ°›μ•„μ„œ μ‚¬μš©ν•˜λŠ” 것이 κ°€λŠ₯ν•˜λ‹€.

parentλΌλŠ” classλ₯Ό childλΌλŠ” ν΄λž˜μŠ€κ°€ λ°›μ•„μ„œ μ‚¬μš©ν•˜λŠ” 방식이닀.

( μ΄λ•Œ 상속을 λ°›λŠ” 클래슀λ₯Ό μžμ‹ν΄λž˜μŠ€λΌκ³  μ΄μ•ΌκΈ°ν•˜κ³  상속을 ν•΄μ£ΌλŠ” 클래슀λ₯Ό λΆ€λͺ¨ν΄λž˜μŠ€λΌκ³  μ΄μ•ΌκΈ°ν•œλ‹€. )

μœ„μ™€ 같은 λ°©μ‹μœΌλ‘œ 상속을 λ°›μœΌλ©΄ 상속을 ν•΄μ£ΌλŠ” λ²”μœ„μ— 따라 λΆ€λͺ¨ν΄λž˜μŠ€μ— μžˆλŠ” λ§€κ°œλ³€μˆ˜λ‚˜ λ§€κ°œν•¨μˆ˜λ“±μ„ μ‚¬μš©κ°€λŠ₯ν•˜κ²Œ λœλ‹€.

 

polymorphism ( λ‹€ν˜•μ„± )

μ„œλ‘œ λ‹€λ₯Έ 객체가 λ™μΌν•œ 메세지에 λŒ€ν•˜μ—¬ μ„œλ‘œ λ‹€λ₯Έ λ°©λ²•μœΌλ‘œ 응닡할 수 μžˆλŠ” κΈ°λŠ₯

λΆ€λͺ¨ ν΄λž˜μŠ€μ—κ²Œμ„œ 상속받은 λ§€κ°œν•¨μˆ˜λ₯Ό μžμ‹ν΄λž˜μŠ€μ—μ„œλŠ” κ·Έ κΈ°λŠ₯ κ·ΈλŒ€λ‘œ μ‚¬μš©ν•˜λŠ” 것이 μ•„λ‹ˆλΌ μžμ‹ν΄λž˜μŠ€μ—μ„œ μ‚¬μš©μš©λ„μ— 따라 μž¬μ„ μ–Έν•˜μ—¬ λ³€κ²½ν•˜μ—¬ μ‚¬μš©ν•˜λŠ” 것을 λ‹€ν˜•μ„±μ΄λΌκ³  μ •μ˜λ₯Ό ν•œλ‹€.

class Parent
{
public:
		void hello() 
		{
			std::cout << "parent";
		}
};

class Child : public Parent
{
public:
		void hello() 
		{
			std::cout << "Child";
		}
}

μœ„μ™€ 같은 λ°©μ‹μ²˜λŸΌ 상속을 받은 μžμ‹ν΄λž˜μŠ€μ—μ„œ λ§€κ°œν•¨μˆ˜λ₯Ό μž¬μ •μ˜ν•˜λŠ” λ°©μ‹μœΌλ‘œ μ‚¬μš©ν•˜λŠ” 것을 μ΄μ•ΌκΈ°ν•œλ‹€.

 

상속 : λΆ€λͺ¨ ν΄λž˜μŠ€μ— μžˆλŠ” ν•¨μˆ˜λ₯Ό μžμ‹ ν΄λž˜μŠ€κ°€ 상속받아 μ‚¬μš©ν•˜λŠ”κ²ƒ.

λ‹€ν˜•μ„± : λΆ€λͺ¨ ν΄λž˜μŠ€μ— μžˆλŠ” ν•¨μˆ˜λ₯Ό μžμ‹ ν΄λž˜μŠ€κ°€ 상속을 λ°›μ§€λ§Œ 상황에 맞좰 μž¬μ •μ˜ν•˜μ—¬ μ‚¬μš©ν•˜λŠ”κ²ƒ


Ad-hoc polymorphism

이름은 κ°™μ§€λ§Œ λ‹€λ₯Έ λ§€κ°œλ³€μˆ˜λ₯Ό λ°›λŠ”κ²ƒ

int sum(int a, int b)
{
	return a + b;
}

double sum(double a, double b)
{
	return a + b;
}

μœ„μ™€κ°™μ΄ classλ‚΄λΆ€μ—μ„œ 같은 μ΄λ¦„μ˜ λ§€κ°œν•¨μˆ˜μ΄μ§€λ§Œ λ°›λŠ” μž…λ ₯값이 λ‹€λ₯΄κ²Œ μ„€μ •ν•˜λŠ” 경우λ₯Ό Ad-hoc polymorphism 이라고 μ •μ˜ν•œλ‹€.


[C++] 상속과 λ‹€ν˜•μ„± (Inheritance & Polymorphism)

 

[C++] 상속과 λ‹€ν˜•μ„± (Inheritance & Polymorphism)

μš°μ„  μ—¬κΈ°μ„œλŠ” 상속과 λ‹€ν˜•μ„±μ— λŒ€ν•œ κ°„λ‹¨ν•œ 의미만 정리 ν•˜κ³  λ„˜μ–΄κ°ˆ κ²ƒμž…λ‹ˆλ‹€. λ‹€μŒμ— 상속과 λ‹€ν˜•μ„±μ— λŒ€ν•΄μ„œ 더 μžμ„Έν•œ ν¬μŠ€νŒ…μ„ ν•  κ²ƒμž…λ‹ˆλ‹€. 상속 (Inheritance) : 상속은 기쑴의 클래슀λ₯Ό ν† 

pacs.tistory.com

μœ„μ— 링크λ₯Ό μ°Έκ³ ν•˜μ—¬ ν•΄λ‹Ή 글을 μž‘μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€.