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++ 정리 - 31 (좔상화 λ°μ΄ν„°ν˜•(abstract data type, ADT), μ—°μ‚°μž μ˜€λ²„λ‘œλ”©, ν”„λ Œλ“œμ˜ λ„μž…)

2020. 11. 3. 21:38
728x90

좔상화 λ°μ΄ν„°ν˜•(abstract data type, ADT)

μŠ€νƒμ˜ νŠΉμ„±μ„ 일반적이고 좔상적인 λ°©μ‹μœΌλ‘œ μ‚΄νŽ΄λ³΄μž.

  • 빈 μŠ€νƒ 생성 κ°€λŠ₯
  • μŠ€νƒμ˜ κΌ­λŒ€κΈ°μ— ν•­λͺ© μΆ”κ°€ κ°€λŠ₯
  • μŠ€νƒμ˜ κΌ­λŒ€κΈ°μ—μ„œ ν•­λͺ© μ‚­μ œ κ°€λŠ₯
  • μŠ€νƒμ΄ 가득 μ°¨μžˆλŠ”μ§€ 검사 κ°€λŠ₯
  • μŠ€νƒμ΄ λΉ„μ–΄μžˆλŠ”μ§€ 검사 κ°€λŠ₯

클래슀의 ν™œμš©

μ—°μ‚°μž μ˜€λ²„λ‘œλ”©

μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ€ c++κ°€ κ°€μ§„ λ‹€ν˜• νŠΉμ„±μ˜ ν•œ μ˜ˆμ΄λ‹€.

μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ€, c++ μ—°μ‚°μžλ“€μ— 닀쀑적인 의미λ₯Ό λΆ€μ—¬ν•˜λŠ” 것이닀.

c++μ—μ„œλŠ” μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ„ μ‚¬μš©μž μ •μ˜ λ°μ΄ν„°ν˜• κΉŒμ§€ ν™•μž₯ν•  수 μžˆλ‹€.

예λ₯Ό λ“€μ–΄ 2개의 배열을 λ”ν•˜λŠ” 것은 μ•„μ£Ό μ‰¬μš΄ 계산이닀.

for(int i=0;i<20;i++)

evening[i]=sam[i]+janet[i];

κ·ΈλŸ¬λ‚˜ c++μ—μ„œλŠ” 배열을 λ‚˜νƒ€λ‚΄λŠ” 클래슀λ₯Ό μ •μ˜ν•˜κ³ , +μ—°μ‚°μžλ₯Ό μ˜€λ²„λ‘œλ”©ν•˜μ—¬ λ‹€μŒκ³Ό 같이 처리 κ°€λŠ₯

evening=sam+janet;

 

μ—°μ‚°μžλ₯Ό μ˜€λ²„λ‘œλ”©ν•˜λ €λ©΄, μ—°μ‚°μž ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

operatorop(argument-list)

 

μ—¬κΈ°μ„œ opλŠ” μ˜€λ²„λ‘œλ”©ν•  μ—°μ‚°μžλ₯Ό λ‚˜νƒ€λ‚΄λŠ” κΈ°ν˜Έμ΄λ‹€.

(operator+()λŠ” +μ—°μ‚°μžλ₯Ό μ˜€λ²„λ‘œλ”©ν•œλ‹€.)

μƒˆλ‘œμš΄ 기호λ₯Ό μ‚¬μš©ν•  수 μ—†λ‹€. (operator@() ν•¨μˆ˜λ₯Ό λ§Œλ“€ 수 μ—†λ‹€. κ·ΈλŸ¬λ‚˜ operator[]() ν•¨μˆ˜λŠ” []κ°€ λ°°μ—΄ 인덱슀 μ—°μ‚°μžμ΄κΈ° λ•Œλ¬Έμ— μ˜€λ²„λ‘œλ”© κ°€λŠ₯)

 

μ˜€λ²„λ‘œλ”© μ œμ•½

μ˜€λ²„λ‘œλ”©λœ μ—°μ‚°μžλŠ”, 적어도 ν•˜λ‚˜μ˜ ν”Όμ—°μ‚°μžκ°€ μ‚¬μš©μž μ •μ˜ λ°μ΄ν„°ν˜•μΌ 것을 μš”κ΅¬ν•œλ‹€. 이 μ œμ•½μ€ ν‘œμ€€ λ°μ΄ν„°ν˜•μ„ μœ„ν•΄ μ‚¬μš©λ˜λŠ” μ—°μ‚°μžλ“€μ΄ μ˜€λ²„λ‘œλ”©λ˜λŠ” 것을 막아쀀닀. (λΊ„μ…ˆ μ—°μ‚°μž(-)λ₯Ό 두 개의 double ν˜• κ°’μ˜ μ°¨κ°€ μ•„λ‹Œ 합을 μ‚°μΆœν•˜λ„λ‘ μž¬μ •μ˜ λΆˆκ°€)

 

μ˜€λ²„λ‘œλ”©λœ μ—°μ‚°μžλ₯Ό, μ˜€λ¦¬μ§€λ„ μ—°μ‚°μžμ— μ μš©λ˜λŠ” 문법 κ·œμΉ™μ„ μœ„λ°˜ν•˜λŠ” λ°©μ‹μœΌλ‘œ μ‚¬μš© λΆˆκ°€.

μ—°μ‚°μž μš°μ„ μˆœμœ„λ„ λ³€κ²½ λΆˆκ°€. (μ˜€λ²„λ‘œλ”©λœ λ§μ…ˆ μ—°μ‚°μžλŠ” λ³΄ν†΅μ˜ λ§μ…ˆ μ—°μ‚°μžμ™€ 같은 μš°μ„ μˆœμœ„ 가짐)

 

μ—°μ‚°μž 기호λ₯Ό μƒˆλ‘œ λ§Œλ“€ 수 μ—†λ‹€.

예λ₯Ό λ“€μ–΄ κ±°λ“­μ œκ³±μ„ λ‚˜νƒ€λ‚Ό λͺ©μ μœΌλ‘œ operator**()와 같은 ν•¨μˆ˜ μ •μ˜ λΆˆκ°€

 

λ‹€μŒκ³Ό 같은 μ—°μ‚°μžλ“€μ€ μ˜€λ²„λ‘œλ”© λΆˆκ°€

sizeof,.(멀버 μ—°μ‚°μž), .*(멀버 μ§€μ‹œ 포인터 μ—°μ‚°μž), ::(μ‚¬μš© λ²”μœ„ κ²°μ • μ—°μ‚°μž), ?:(쑰건 μ—°μ‚°μž), typeid(RTTI μ—°μ‚°μž), const_cast,dynamic_cast,reinterpret_cast,static_cast

 

λ‹€μŒμ˜ μ—°μ‚°μžλ“€μ€ μ˜€λ²„λ‘œλ”©ν•˜λŠ”λ° 멀버 ν•¨μˆ˜λ§Œ μ‚¬μš© κ°€λŠ₯

=,()(ν•¨μˆ˜ 호좜 μ—°μ‚°μž),[](λ°°μ—΄ 인덱슀 μ—°μ‚°μž),->(클래슀 멀버 μ ‘κ·Ό 포인터 μ—°μ‚°μž)

 

ν”„λ Œλ“œμ˜ λ„μž…

ν”„λ Œλ“œλŠ” λ‹€μŒκ³Ό 같은 μ„Έ κ°€μ§€ ν˜•νƒœλ‘œ μ‚¬μš©λ¨.

  • ν”„λ Œλ“œ ν•¨μˆ˜
  • ν”„λ Œλ“œ 클래슀
  • ν”„λ Œλ“œ 멀버 ν•¨μˆ˜

ν•¨μˆ˜λ₯Ό μ–΄λ–€ ν΄λž˜μŠ€μ— λŒ€ν•΄ ν”„λ Œλ“œλ‘œ λ§Œλ“€λ©΄, κ·Έ ν”„λ Œλ“œ ν•¨μˆ˜λŠ” 클래슀의 멀버 ν•¨μˆ˜λ“€μ΄ κ°€μ§€λŠ” 것과 λ™λ“±ν•œ μ ‘κ·Ό κΆŒν•œμ„ κ°–λŠ”λ‹€.

 

ν”„λ Œλ“œ μƒμ„±ν•˜κΈ°

ν”„λ Œλ“œ ν•¨μˆ˜λ₯Ό λ§Œλ“œλŠ” 첫 번째 λ‹¨κ³„λŠ”, 클래슀 선언에 μ›ν˜•μ„ λ„£λŠ” 것이닀. μ΄λ•Œ friendλΌλŠ” ν‚€μ›Œλ“œλ₯Ό μ•žμ— λΆ™μ–΄μ•Ό ν•œλ‹€.

friend Time operator*(double m,const Time &t);

 

이 μ›ν˜•μ€ 두 κ°€μ§€ 함좕적인 의미λ₯Ό κ°€μ§€κ³  μžˆλ‹€.

  1. operator*()ν•¨μˆ˜λŠ”, 클래슀 μ„ μ–Έ μ•ˆμ— μ„ μ–Έλ˜μ§€λ§Œ 멀버 ν•¨μˆ˜κ°€ μ•„λ‹ˆλ‹€. κ·ΈλŸ¬λ―€λ‘œ 멀버 μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜μ—¬ ν˜ΈμΆœλ˜μ§€ μ•ŠλŠ”λ‹€.
  2. operator*()ν•¨μˆ˜λŠ”, 멀버 ν•¨μˆ˜λŠ” μ•„λ‹ˆμ§€λ§Œ 멀버 ν•¨μˆ˜μ™€ λ™λ“±ν•œ μ ‘κ·Ό κΆŒν•œμ„ κ°€μ§„λ‹€.

두 번째 λ‹¨κ³„λŠ” ν•¨μˆ˜ μ •μ˜λ₯Ό μž‘μ„±ν•˜λŠ” 것

멀버 ν•¨μˆ˜κ°€ μ•„λ‹ˆλ―€λ‘œ Time::μ œν•œμžλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€. λ˜ν•œ friend ν‚€μ›Œλ“œλ„ μ‚¬μš©ν•˜μ§€ μ•ŠμŒ.

Time operator*(double m,const Time &t)
{
Time result;
long totalminutes=t.hours*m*60+t.minutes*m;
result.hours=totalminutes/60;
result.minuter=totalminutes%60;
return result;
}

 

μœ„ ν”„λ Œλ“œ ν•¨μˆ˜λŠ”, κ³±μ…ˆμ—μ„œ μ–΄λ–€ 값이 λ¨Όμ € λ‚˜μ˜€λ„λ‘ 고침으둜써 ν”„λ Œλ“œκ°€ μ•„λ‹Œ ν•¨μˆ˜λ‘œ μž‘μ„± κ°€λŠ₯.

 

Time operator*()(double m,const Time& t)
{return t*m; //t.operator*(m)을 μ‚¬μš©}

 

728x90
μ €μž‘μžν‘œμ‹œ λΉ„μ˜λ¦¬ (μƒˆμ°½μ—΄λ¦Ό)
    'πŸ”€ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄/C++ 정리' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • C++ 정리 - 33 (볡사 μƒμ„±μž, λŒ€μž… μ—°μ‚°μž, static 클래슀 멀버 λ³€μˆ˜, 객체 리턴에 λŒ€ν•œ κ΄€μ°°, new에 μ˜ν•œ 객체 μ΄ˆκΈ°ν™”)
    • C++ 정리 - 32 (ν”„λ Œλ“œ:<<μ—°μ‚°μžμ˜ μ˜€λ²„ λ‘œλ”©, μžλ™ λ³€ν™˜κ³Ό 클래슀의 λ°μ΄ν„°ν˜• λ³€ν™˜, λ³€ν™˜ ν•¨μˆ˜(conversion function), ν΄λž˜μŠ€μ™€ 동적 λ©”λͺ¨λ¦¬ λŒ€μž…, νŠΉλ³„ 멀버 ν•¨μˆ˜, λ””ν΄νŠΈ μƒμ„±μž)
    • C++ 정리 - 30 (μƒμ„±μž μ‚¬μš©ν•˜κΈ°, λ””ν΄νŠΈ μƒμ„±μž, 파괴자, c++11의 리슀트 μ΄ˆκΈ°ν™”, const 멀버 ν•¨μˆ˜, this 포인터, 객체 λ°°μ—΄, 클래슀 μ‚¬μš© λ²”μœ„, λ²”μœ„κ°€ μ •ν•΄μ§„ μ—΄κ±°(c++11))
    • C++ 정리 - 29 (객체와 클래슀, μ ˆμ°¨μ‹ ν”„λ‘œκ·Έλž˜λ°κ³Ό 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°, 좔상화와 클래슀, c++의 클래슀, 클래슀 λ©€λ²„ν•¨μˆ˜μ˜ κ΅¬ν˜„, 인라인 λ©”μ„œλ“œ, 클래슀 μ„ μ–Έμ˜ 일반적인 ν˜•μ‹, 클래슀 생성..
    hugDog
    hugDog
    μ•ˆλ“œλ‘œμ΄λ“œ 곡뢀 쀑인 ν•™μƒμž…λ‹ˆλ‹€!

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