hugDog
Android DevLog
hugDog
전체 방문자
였늘
μ–΄μ œ
  • πŸ™Œ Hello? (162)
    • πŸ§©μ•ˆλ“œλ‘œμ΄λ“œ (12)
      • κ°œλ… 정리 (5)
      • 버그 ν•΄κ²° (4)
      • 기타 (3)
    • πŸ”μ•Œκ³ λ¦¬μ¦˜ (54)
      • κ°œλ… (0)
      • λ°±μ€€ (48)
      • ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ (6)
    • πŸ“„κ°œλ°œ 일지 (0)
      • FINPO (0)
    • πŸ”€ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ (71)
      • C++ 정리 (49)
      • C++κΈ°μ΄ˆν”ŒλŸ¬μŠ€ μ—°μŠ΅λ¬Έμ œ (20)
      • Kotlin (2)
    • ⭐Project (1)
    • 🚴TIL (13)
      • Clean Code (13)
    • πŸš©κΈ°νƒ€ (9)
      • λͺ©ν‘œ (6)
      • 일상 (3)
      • λ¬Έμ„œ (0)

인기 κΈ€

졜근 λŒ“κΈ€

졜근 κΈ€

ν‹°μŠ€ν† λ¦¬

hELLO Β· Designed By μ •μƒμš°.
hugDog

Android DevLog

πŸ”€ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄/C++ 정리

C++ 정리 - 35 (상속: is-a 관계, public λ‹€ν˜• 상속, 가상 λ©”μ„œλ“œλŠ” μ™œ ν•„μš”ν• κΉŒ?, 정적 κ²°ν•©κ³Ό 동적 κ²°ν•©, 포인터와 μ°Έμ‘°ν˜•μ˜ ν˜Έν™˜, 가상 멀버 ν•¨μˆ˜μ™€ 동적 κ²°ν•©, μ ‘κ·Όμ œμ–΄: protected, ABC μ² ν•™, 상속과 ..

2020. 11. 14. 18:51
728x90

상속: is-a 관계

c++λŠ” μƒμ†μ˜ 3κ°€μ§€ ν˜•μ‹μœΌλ‘œ public, protected, privateλ₯Ό κ°€μ§€κ³  μžˆλ‹€. public 상속은 is-a 관계λ₯Ό λ‚˜νƒ€λ‚Έλ‹€. (νŒŒμƒ 클래슀 객체가 기초 클래슀 객체이기도 함) 기초 클래슀 객체λ₯Ό λŒ€μƒμœΌλ‘œ μˆ˜ν–‰ν•  수 μžˆλŠ” λͺ¨λ“  μž‘μ—…μ„, νŒŒμƒ 클래슀 객체에 λŒ€ν•΄μ„œλ„ μˆ˜ν–‰ κ°€λŠ₯

 

public λ‹€ν˜• 상속

public λ‹€ν˜• 상속을 κ΅¬ν˜„ν•˜λŠ” 두 κ°€μ§€ μ€‘μš”ν•œ 방법이 μžˆλ‹€.

  • 기초 클래슀 λ©”μ„œλ“œλ₯Ό νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ λ‹€μ‹œ μ •μ˜ν•œλ‹€.
  • 가상 λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€.

virtual ν‚€μ›Œλ“œλŠ” λ©”μ„œλ“œκ°€ 객체에 μ˜ν•΄ ν˜ΈμΆœλ˜μ§€ μ•Šκ³  μ°Έμ‘°λ‚˜ 포인터에 μ˜ν•΄ ν˜ΈμΆœλ˜μ—ˆμ„ λ•Œ μ–΄λŠ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•  것인지 κ²°μ •ν•œλ‹€. virtual ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν–ˆμ„ κ²½μš°μ—, ν”„λ‘œκ·Έλž¨μ€ μ°Έμ‘°λ‚˜ 포인터에 μ˜ν•΄ μ§€μ‹œλ˜λŠ” κ°μ²΄ν˜•μ— κΈ°μ΄ˆν•˜μ—¬ λ©”μ„œλ“œλ₯Ό μ„ νƒν•œλ‹€.

 

가상 λ©”μ„œλ“œλŠ” μ™œ ν•„μš”ν• κΉŒ?

νŒŒκ΄΄μžλ“€μ΄ 가상이 μ•„λ‹ˆλΌλ©΄, ν¬μΈν„°ν˜•μ— ν•΄λ‹Ήν•˜λŠ” 파괴자만 호좜될 것이닀. νŒŒκ΄΄μžκ°€ 가상이면, κ°μ²΄ν˜•μ— ν•΄λ‹Ήν•˜λŠ” νŒŒκ΄΄μžκ°€ ν˜ΈμΆœλœλ‹€.

 

정적 κ²°ν•©κ³Ό 동적 κ²°ν•©

μ†ŒμŠ€ μ½”λ“œμ— μžˆλŠ” ν•¨μˆ˜ ν˜ΈμΆœμ„ νŠΉμ • 블둝에 μžˆλŠ” ν•¨μˆ˜ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λΌλŠ” 뜻으둜 ν•΄μ„ν•˜λŠ” 것을 "ν•¨μˆ˜ 이름을 κ²°ν•©(binding)ν•œλ‹€"라고 말함. μ»΄νŒŒμΌν•˜λŠ” λ™μ•ˆμ— μΌμ–΄λ‚˜λŠ” 결합을 정적 κ²°ν•© λ˜λŠ” 초기 결합이라 ν•œλ‹€. μ»΄νŒŒμΌλŸ¬λŠ” ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•  λ•Œ μ˜¬λ°”λ₯Έ 가상 λ©”μ„œλ“œκ°€ μ„ νƒλ˜λ„λ‘ ν•˜λŠ” μ½”λ“œλ₯Ό λ§Œλ“€μ–΄ λ‚΄μ•Ό ν•œλ‹€. 이 μž‘μ—…μ„ 동적 κ²°ν•© λ˜λŠ” 말기 결합이라 ν•œλ‹€. 

 

포인터와 μ°Έμ‘°ν˜•μ˜ ν˜Έν™˜

νŒŒμƒ 클래슀 μ°Έμ‘°λ‚˜ 포인터λ₯Ό 기초 클래슀 μ°Έμ‘°λ‚˜ ν¬μΈν„°λ‘œ λ³€ν™˜ν•˜λŠ” 것을 μ—…μΊμŠ€νŒ…(upcasting)이라 ν•œλ‹€. public μƒμ†μ—μ„œλŠ” λͺ…μ‹œμ μΈ λ°μ΄ν„°ν˜• λ³€ν™˜μ΄ 없어도 μ—…μΊμŠ€νŒ…μ΄ μ–Έμ œλ“ μ§€ ν—ˆμš©λœλ‹€.

 

κ·Έ λ°˜λŒ€ κ³Όμ •, 기초 클래슀 ν¬μΈν„°λ‚˜ μ°Έμ‘°λ₯Ό νŒŒμƒ 클래슀 ν¬μΈν„°λ‚˜ 참쑰둜 λ³€ν™˜ν•˜λŠ” 것을 λ‹€μš΄ μΊμŠ€νŒ…μ΄λΌ ν•œλ‹€. λ‹€μš΄ μΊμŠ€νŒ…μ€ λͺ…μ‹œμ μΈ λ°μ΄ν„°ν˜• λ³€ν™˜ μ—†μ΄λŠ” ν—ˆμš©λ˜μ§€ μ•ŠλŠ”λ‹€.

 

가상 멀버 ν•¨μˆ˜μ™€ 동적 κ²°ν•©

λ‹€μŒκ³Ό 같은 μ½”λ“œλ₯Ό κ°€μ§€κ³  μžˆλ‹€κ³  κ°€μ •ν•˜μž.

BrassPlus ophelia; //νŒŒμƒ 클래슀 객체

Brass *bp; //기초 클래슀 포인터

bp = &ophelia; //BrassPlus 객체λ₯Ό μ§€μ‹œν•˜λŠ” Brass 포인터

bp->ViewAcct(); //μ–΄λŠ 버전을 ν˜ΈμΆœν• κΉŒ?

 

ViewAcct()λ₯Ό 기초 ν΄λž˜μŠ€μ— κ°€μƒμœΌλ‘œ μ„ μ–Έν•˜μ§€ μ•ŠμœΌλ©΄, bp->ViewAcct()λŠ” Brass* ν˜•μ˜ 포인터에 κΈ°μ΄ˆν•˜μ—¬ Brass::ViewAcct()λ₯Ό 호좜 ν•œλ‹€. μ»΄νŒŒμΌλŸ¬λŠ” 가상이 μ•„λ‹Œ ν•¨μˆ˜λ“€μ— λŒ€ν•΄μ„œ 정적 결합을 μ‚¬μš©ν•œλ‹€.

 

ViewAcct()λ₯Ό 기초 ν΄λž˜μŠ€μ— κ°€μƒμœΌλ‘œ μ„ μ–Έν•˜λ©΄, bp->ViewAcct()λŠ” BrassPlus 객체에 κΈ°μ΄ˆν•˜μ—¬ BrassPlus::ViewAcct()λ₯Ό ν˜ΈμΆœν•œλ‹€. 이 μ˜ˆμ—μ„œλŠ” κ·Έ κ°μ²΄ν˜•μ΄ BrassPlus이닀. ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜λŠ” λ™μ•ˆμ— κ²°μ •λ˜λŠ” κ°μ²΄ν˜•μ— 따라 ViewAcct()λ₯Ό Brass::ViewAcct()에 κ²°ν•©ν•˜κ±°λ‚˜ λ˜λŠ” BrassPlus::ViewAcct()에 κ²°ν•©ν•˜λŠ” μ½”λ“œλ₯Ό μ»΄νŒŒμΌλŸ¬κ°€ λ§Œλ“€μ–΄λ‚Έλ‹€. μ»΄νŒŒμΌλŸ¬λŠ” 가상 ν•¨μˆ˜λ“€μ— λŒ€ν•΄ 동적 결합을 μ‚¬μš©ν•œλ‹€.

 

가상 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ λ©”λͺ¨λ¦¬μ™€ μ‹€ν–‰ 속도 λ©΄μ—μ„œ λ‹€μŒκ³Ό 같은 μ•½κ°„μ˜ 뢀담이 λ”°λ₯Έλ‹€.

  • 각 객체의 크기가 μ£Όμ†Œ ν•˜λ‚˜λ₯Ό μ €μž₯ν•˜λŠ”λ° ν•„μš”ν•œ μ–‘ 만큼 컀진닀.
  • 각각의 ν΄λž˜μŠ€μ— λŒ€ν•΄, μ»΄νŒŒμΌλŸ¬λŠ” 가상 ν•¨μˆ˜λ“€μ˜ μ£Όμ†Œλ‘œ 이루어진 ν•˜λ‚˜μ˜ ν…Œμ΄λΈ”(λ°°μ—΄)을 λ§Œλ“ λ‹€.
  • 각각의 ν•¨μˆ˜ ν˜ΈμΆœμ— λŒ€ν•΄, μ‹€ν–‰ν•  ν•¨μˆ˜μ˜ μ£Όμ†Œλ₯Ό μ–»κΈ° μœ„ν•΄ ν…Œμ΄λΈ”μ— μ ‘κ·Όν•˜λŠ” 것 μ™Έμ˜ 단계가 더 ν•„μš”ν•˜λ‹€.

가상 λ©”μ„œλ“œμ— λŒ€ν•΄ μ•Œμ•„μ•Όν•  사항

  1. 기초 ν΄λž˜μŠ€μ—μ„œ 클래슀 λ©”μ„œλ“œλ₯Ό μ„ μ–Έν•  λ•Œ ν‚€μ›Œλ“œ virtual둜 μ‹œμž‘ν•˜λ©΄, κ·Έ ν•¨μˆ˜λŠ” 기초 클래슀, 기초 ν΄λž˜μŠ€μ—μ„œ νŒŒμƒλœ 클래슀, νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ λ‹€μ‹œ νŒŒμƒλœ 클래슀 λ“± λͺ¨λ“  ν΄λž˜μŠ€μ— λŒ€ν•΄ 가상이 λœλ‹€.
  2. 객체에 λŒ€ν•œ μ°Έμ‘°λ₯Ό μ‚¬μš©ν•˜μ—¬ λ˜λŠ” 객체λ₯Ό μ§€μ‹œν•˜λŠ” 포인터λ₯Ό μ‚¬μš©ν•˜μ—¬ 가상 λ©”μ„œλ“œκ°€ 호좜되면, ν”„λ‘œκ·Έλž¨μ€ κ·Έ μ°Έμ‘°λ‚˜ ν¬μΈν„°ν˜•μ„ μœ„ν•΄ μ •μ˜λœ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³ , κ°μ²΄ν˜•μ„ μœ„ν•΄ μ •μ˜λœ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€. 이것을 동적 결합이라 함.
  3. 상속을 μœ„ν•΄ 기초 클래슀둜 μ‚¬μš©ν•  클래슀λ₯Ό μ •μ˜ν•  λ•Œ, νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ λ‹€μ‹œ μ •μ˜ν•΄μ•Ό ν•˜λŠ” 클래슀 λ©”μ„œλ“œλ“€μ€ 가상 ν•¨μˆ˜λ‘œ μ„ μ–Έν•΄μ•Ό ν•œλ‹€.

μƒμ„±μž

μƒμ„±μžλŠ” κ°€μƒμœΌλ‘œ μ„ μ–Έν•  수 μ—†λ‹€.

 

파괴자

ν΄λž˜μŠ€κ°€ 기초 클래슀둜 μ‚¬μš©λœλ‹€λ©΄, νŒŒκ΄΄μžλŠ” κ°€μƒμœΌλ‘œ μ„ μ–Έν•΄μ•Ό ν•œλ‹€.

 

ν”„λ Œλ“œ

ν”„λ Œλ“œλŠ” 가상 ν•¨μˆ˜κ°€ 될 수 μ—†λ‹€.

 

가상 ν•¨μˆ˜λ₯Ό λ‹€μ‹œ μ •μ˜ν•˜μ§€ μ•ŠμœΌλ©΄ νŒŒμƒ ν΄λž˜μŠ€λŠ” κ·Έ ν•¨μˆ˜μ˜ 기초 클래슀 버전을 μ‚¬μš©ν•œλ‹€. νŒŒμƒ ν΄λž˜μŠ€κ°€ 길게 이어진 νŒŒμƒ μ‚¬μŠ¬μ˜ 일뢀라면, κ·Έ νŒŒμƒ ν΄λž˜μŠ€λŠ” κ·Έ ν•¨μˆ˜μ˜ κ°€μž₯ μ΅œκ·Όμ— μ •μ˜λœ 버전을 μ‚¬μš©ν•œλ‹€.

 

가상 ν•¨μˆ˜λ₯Ό λ‹€μ‹œ μ •μ˜ν•˜λ©΄ λ©”μ„œλ“œκ°€ μ€λ‹‰λœλ‹€.

class Dwelling
{
public:
	virtual void showperks(int a) const;
    ...
};

class Hovel: public Dwelling
{
public:
	virtual void showperks() const;
    ...
}

 

μœ„ μ½”λ“œλŠ” λ‹€μŒκ³Ό 같은 것을 μ•”μ‹œν•¨.

Hovel trump;

trump.showperks(); //λ§žλ‹€

trump.showperks(5); //틀리닀

 

μƒˆλ‘œμš΄ μ •μ˜λŠ” 맀개 λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” showperks()ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜κ³ , 이것은 μ˜€λ²„ λ‘œλ”©λœ 두 개의 ν•¨μˆ˜ 버전을 μƒμ„±ν•˜μ§€ μ•ŠλŠ”λ‹€. 이 μž¬μ •μ˜λŠ” intν˜• λ§€κ°œλ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 기초 클래슀 버전을 κ°€μ§„λ‹€. 즉 μƒμ†λœ λ©”μ„œλ“œλ₯Ό λ‹€μ‹œ μ •μ˜ν•˜λŠ” 것은 μ˜€λ²„ λ‘œλ”©μ˜ 변쒅이 μ•„λ‹ˆλ‹€. μ–΄λ–€ ν•¨μˆ˜λ₯Ό νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ λ‹€μ‹œ μ •μ˜ν•˜λ©΄, λ™μΌν•œ ν•¨μˆ˜ μ‹œκ·Έλ‚΄μ²˜λ₯Ό κ°€μ§€κ³  μžˆλŠ” 기초 클래슀 μ„ μ–Έλ§Œ κ°€λ¦¬λŠ” 것이 μ•„λ‹ˆλΌ. 맀개 λ³€μˆ˜ μ‹œκ·Έλ‚΄μ²˜μ™€λŠ” 상관없이 같은 이름을 κ°€μ§„ λͺ¨λ“  기초 클래슀 λ©”μ„œλ“œλ“€μ„ 가짐.

 

μƒμ†λœ λ©”μ„œλ“œλ₯Ό μž¬μ •μ˜ ν•  경우 μ˜€λ¦¬μ§€λ„ μ›ν˜•κ³Ό μ •ν™•νžˆ μΌμΉ˜μ‹œν‚¬ ν•„μš”κ°€ μžˆλ‹€. λ¦¬ν„΄ν˜•μ΄ 기초 ν΄λž˜μŠ€μ— λŒ€ν•œ μ°Έμ‘°λ‚˜ 포인터인 κ²½μš°μ— νŒŒμƒ ν΄λž˜μŠ€μ— λŒ€ν•œ μ°Έμ‘°λ‚˜ ν¬μΈν„°λ‘œ λŒ€μ²΄ κ°€λŠ₯ν•˜λ‹€. 이 κΈ°λŠ₯을 λ¦¬ν„΄ν˜•μ˜ 곡변이라 ν•œλ‹€.

 

기초 클래슀 선언이 μ˜€λ²„λ‘œλ”©λ˜μ—ˆλ‹€λ©΄, νŒŒμƒ ν΄λž˜μŠ€μ—μ„œ λͺ¨λ“  기초 클래슀 버전듀을 μž¬μ •μ˜ ν•΄μ•Ό ν•œλ‹€.

 

μ ‘κ·Όμ œμ–΄: protected

publicκ³Ό private 외에 ν‚€μ›Œλ“œ protectedλ₯Ό μ‚¬μš©ν•˜λŠ” μ ‘κ·Ό μ œμ–΄κ°€ ν•œ κ°€μ§€ 더 μžˆλ‹€.

λ°”κΉ₯ μ„Έκ³„μ—μ„œ protected 뢀뢄에 μžˆλŠ” 클래슀 멀버에 μ ‘κ·Όν•˜κΈ° μœ„ν•΄μ„œλŠ” public 클래슀 멀버λ₯Ό μ‚¬μš©ν•΄μ•Όλ§Œ ν•œλ‹€λŠ” μ μ—μ„œ protected ν‚€μ›Œλ“œλŠ” private와 λΉ„μŠ·ν•˜λ‹€.

 

protected와 private의 μ°¨μ΄λŠ”, νŒŒμƒ 클래슀의 멀버듀은 기초 클래슀의 protected λ©€λ²„μ—λŠ” 직접 μ ‘κ·Όν•  수 μžˆμ§€λ§Œ, 기초 클래슀의 private λ©€λ²„μ—λŠ” 직접 μ ‘κ·Όν•  수 μ—†λ‹€.

 

좔상화 기초 클래슀(abstract base class;ABC)

적어도 ν•˜λ‚˜μ˜ 순수 가상 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ„œμˆ ν•œλ‹€. ABCλ‘œλΆ€ν„° νŒŒμƒλœ ν΄λž˜μŠ€λ“€μ€ 일반 가상 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©°, κ·Έ νŠΉλ³„ν•œ νŒŒμƒ 클래슀의 속성을 κ°€μ§€κ³  κ·Έ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œλ‹€.

 

순수 가상 ν•¨μˆ˜: κ΅¬ν˜„λ˜μ§€ μ•Šμ€ ν•¨μˆ˜, ν•¨μˆ˜ μ„ μ–Έ 뒀에 =0을 κ°€μ§„λ‹€.

 

ABC μ² ν•™

좔상화 클래슀λ₯Ό μ„€κ³„ν•˜κΈ° 전에, ν”„λ‘œκ·Έλž˜λ° 문제λ₯Ό ν‘œν˜„ν•˜λŠ”λ° ν•„μš”ν•œ ν΄λž˜μŠ€λ“€μ€ μ–΄λ–€ 것듀이 μžˆμ„κΉŒ 그리고 κ·Έ ν΄λž˜μŠ€λ“€μ€ μ–΄λ–€ 연관이 μžˆμ„κΉŒλ₯Ό λ¨Όμ € μƒκ°ν•˜μ—¬ ν•˜λ‚˜μ˜ λͺ¨λΈμ„ κ°œλ°œν•΄μ•Ό ν•œλ‹€. 일뢀 ν”„λ‘œκ·Έλž˜λ¨Έλ“€μ€, ν΄λž˜μŠ€λ“€μ˜ 상속 체계λ₯Ό 섀계할 λ•Œ, ꡬ체화 ν΄λž˜μŠ€λ“€μ€ 기초 클래슀 역할을 μ ˆλŒ€ ν•˜μ§€ λͺ»ν•˜κ²Œ λ§Œλ“€μ–΄μ•Ό ν•œλ‹€κ³  μ£Όμž₯ν•œλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ 섀계가 덜 λ³΅μž‘ν•˜κ³  더 κΉ¨λ—ν•œ μ½”λ“œκ°€ λ§Œλ“€μ–΄μ§„λ‹€.

 

상속과 동적 λ©”λͺ¨λ¦¬ λŒ€μž…

경우 1 - νŒŒμƒ ν΄λž˜μŠ€κ°€ newλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€.

동적 λ©”λͺ¨λ¦¬ λŒ€μž…μ„ μ‚¬μš©ν•˜λŠ” λ‹€μŒκ³Ό 같은 기초 클래슀 κ°€μ •.

class baseDMA
{
private:
	char *label;
    int rating;
public:
	baseDMA(const char *1 = "null",int r=0);
    baseDMA(const baseDMA &rs);
    virtual ~baseDMA();
    baseDMA& operator=(const baseDMA & rs);
    ...
};

 

이 선언은, μƒμ„±μžκ°€ newλ₯Ό μ‚¬μš©ν•  λ•Œ μš”κ΅¬λ˜λŠ” νŠΉλ³„ν•œ λ©”μ„œλ“œλ“€(파괴자, 볡사 μƒμ„±μž, μ˜€λ²„ λ‘œλ”© λŒ€μž… μ—°μ‚°μž)λ₯Ό κ°€μ§€κ³  μžˆλ‹€. baseDMAλ‘œλΆ€ν„° lacksDMAλ₯Ό νŒŒμƒμ‹œν‚€λŠ”λ°, lacksDMAλŠ” newλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³  λ‹€λ₯Έ νŠΉλ³„ν•œ μ²˜λ¦¬λ„ μš”κ΅¬ν•˜μ§€ μ•ŠλŠ”λ‹€κ³  κ°€μ •ν•΄ 보자.

 

class lacksDMA: public baseDMA
{
private:
    char color[40];
public:
	...
};

 

μ΄λŸ¬ν•œ 경우, lacksDMA 클래슀λ₯Ό μœ„ν•΄ λͺ…μ‹œμ  파괴자, 볡사 μƒμ„±μž, λŒ€μž… μ—°μ‚°μžλ₯Ό μ •μ˜ν•  ν•„μš” X

 

경우 2 - νŒŒμƒ ν΄λž˜μŠ€κ°€ newλ₯Ό μ‚¬μš©ν•œλ‹€.

νŒŒμƒ ν΄λž˜μŠ€κ°€ newλ₯Ό μ‚¬μš©ν•œλ‹€κ³  κ°€μ •

class hasDMA: public baseDMA
{
private:
	char * style; // μƒμ„±μžμ—μ„œ newλ₯Ό μ‚¬μš©ν•œλ‹€.
public:
	...
};

이 경우, νŒŒμƒ 클래슀λ₯Ό μœ„ν•œ λͺ…μ‹œμ  파괴자, 볡사 μƒμ„±μž, λŒ€μž… μ—°μ‚°μžλ₯Ό λ‹Ήμ—°νžˆ μ •μ˜ν•΄μ•Ό ν•œλ‹€.

 

μš”μ•½ν•˜λ©΄, 기초 ν΄λž˜μŠ€μ™€ νŒŒμƒ ν΄λž˜μŠ€κ°€ λ‘˜ λ‹€ 동적 λ©”λͺ¨λ¦¬ λŒ€μž…, νŒŒμƒ 클래슀 파괴자, 볡사 μƒμ„±μž, λŒ€μž… μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•  λ•Œ, 이듀은 λͺ¨λ‘ 기초 클래슀 성뢄을 μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ κ·Έλ“€μ˜ 기초 클래슀 λŒ€μ‘λ¬Όμ„ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

 

728x90
μ €μž‘μžν‘œμ‹œ λΉ„μ˜λ¦¬ (μƒˆμ°½μ—΄λ¦Ό)
    'πŸ”€ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄/C++ 정리' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • C++ 정리 - 37 (λŒ€μž… μ—°μ‚°μž κ΄€λ ¨ 사항, private 멀버와 protected 멀버, 가상 λ©”μ„œλ“œ, ν”„λ Œλ“œ κ΄€λ ¨ 사항, 기초 클래슀 λ©”μ„œλ“œμ˜ μ‚¬μš©)
    • C++ 정리 - 36 (클래슀 섀계 볡슡, 클래슀 λ©”μ„œλ“œμ— κ΄€λ ¨λœ κ·Έ λ°–μ˜ κ³ λ € 사항, 객체 리턴과 μ°Έμ‘° 리턴, public 상속에 κ΄€λ ¨λœ κ·Έ λ°–μ˜ 고렀사항)
    • C++ 정리 - 34 (포인터와 객체에 λŒ€ν•œ μš”μ•½, 멀버 초기자 리슀트(member initializer list), 클래슀의 상속, 클래슀 νŒŒμƒμ‹œν‚€κΈ°, μƒμ„±μž:접근에 λŒ€ν•˜μ—¬)
    • C++ 정리 - 33 (볡사 μƒμ„±μž, λŒ€μž… μ—°μ‚°μž, static 클래슀 멀버 λ³€μˆ˜, 객체 리턴에 λŒ€ν•œ κ΄€μ°°, new에 μ˜ν•œ 객체 μ΄ˆκΈ°ν™”)
    hugDog
    hugDog
    μ•ˆλ“œλ‘œμ΄λ“œ 곡뢀 쀑인 ν•™μƒμž…λ‹ˆλ‹€!

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