C Programming Language/C++ 20

C++ μ˜ˆμ™Έ(Exception) 처리(Handling) : throw, try, catch

μ˜ˆμ™Έλž€ 정상적이지 μ•Šμ€ 상황이 μ•ΌκΈ°ν–ˆμ„ λ•Œ λ°œμƒν•˜λŠ” 이벀트λ₯Ό λ§ν•œλ‹€μ „ν†΅μ μΈ μ˜ˆμ™Έ μ²˜λ¦¬λ°©λ²•μ€ μ˜ˆμ™Έλ₯Ό μ˜ˆμƒν•΄μ„œ if문을 톡해 그에 λŒ€ν•œ λ°˜ν™˜κ°’μ„ μ •ν•˜μ—¬μ„œ 미리 μ˜ˆμ™Έλ₯Ό μ²˜λ¦¬ν•˜λŠ” κ²ƒμœΌλ‘œ ν•˜λŠ” 것이닀  throw, try, catch C++μ—μ„œλŠ” throw, try, catchλ₯Ό 톡해 μ˜ˆμ™Έ 처리λ₯Ό ν•  수 μžˆλ‹€. throw: μ˜ˆμ™Έλ₯Ό λ°œμƒμ‹œν‚΄.try: μ˜ˆμ™Έκ°€ λ°œμƒν•  수 μžˆλŠ” μ½”λ“œλ₯Ό κ°μ‹Έμ„œ 보호.catch: λ°œμƒν•œ μ˜ˆμ™Έλ₯Ό 처리.  throw : μ˜ˆμ™Έ λ°œμƒ- throwλŠ” νŠΉμ • μ‘°κ±΄μ—μ„œ μ˜ˆμ™Έλ₯Ό λ°œμƒμ‹œν‚¬ λ•Œ μ‚¬μš©λœλ‹€. μ˜ˆμ™Έλ₯Ό λ°œμƒμ‹œν‚€λ©΄ ν”„λ‘œκ·Έλž¨μ˜ ν˜„μž¬ 흐름은 μ€‘λ‹¨λ˜κ³ , κ°€μž₯ κ°€κΉŒμš΄ catch λΈ”λ‘μ—μ„œ μ˜ˆμ™Έλ₯Ό μ²˜λ¦¬ν•˜λ €κ³  μ‹œλ„ν•œλ‹€.int divide(int a, int b) { if (b == 0) { thr..

C++ μ—…μΊμŠ€νŒ…, λ‹€ν˜•μ„±, 닀쀑 상속과 가상 상속, 가상 ν•¨μˆ˜

C++ Inheritance(상속), 상속과 μ˜€λ²„λ‘œλ”© (using ν‚€μ›Œλ“œ)Inheritance(상속) - C++μ—μ„œ μƒμ†μ˜ μš©μ–΄  base class (superclass : λΆ€λͺ¨ 클래슀)derived class (subclass : μžμ‹ 클래슀)  ex) Person이 base class 이고, studentκ°€ derived class이닀. μœ„μ—μ„œμ™€ 같이 ν‘œμ‹œν•˜λ©΄ 상속을 λ°›λŠ”codebunny99.tistory.com μ—…μΊμŠ€νŒ…(Upcasting)μ΄λž€?μ—…μΊμŠ€νŒ…(Upcasting)은 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°(OOP)μ—μ„œ νŒŒμƒ 클래슀(μžμ‹ 클래슀)의 객체λ₯Ό κΈ°λ³Έ 클래슀(λΆ€λͺ¨ 클래슀) νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•˜λŠ” 것을 μ˜λ―Έν•œλ‹€. 이 λ³€ν™˜μ€ μ•”μ‹œμ μœΌλ‘œ(λͺ…μ‹œμ μΈ μΊμŠ€νŒ… μ—°μ‚° 없이) 이루어지며, 상속 관계에 μžˆλŠ” ν΄λž˜μŠ€λ“€ μ‚¬μ΄μ—μ„œ..

C++ Inheritance(상속), 상속과 μ˜€λ²„λ‘œλ”©, ν…œν”Œλ¦Ώκ³Ό μƒμ†μ˜ 관계

Inheritance(상속) - C++μ—μ„œ μƒμ†μ˜ μš©μ–΄  base class (superclass : λΆ€λͺ¨ 클래슀)derived class (subclass : μžμ‹ 클래슀)  ex) Person이 base class 이고, studentκ°€ derived class이닀. μœ„μ—μ„œμ™€ 같이 ν‘œμ‹œν•˜λ©΄ 상속을 λ°›λŠ”λ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€.  Personμ—μ„œ μ •μ˜ν•œ ν•¨μˆ˜λ“€μ„ Student ν΄λž˜μŠ€κ°€ ν˜ΈμΆœν•˜μ—¬ μ‚¬μš©ν•˜λŠ” 것이 κ°€λŠ₯해진닀.   + μƒμ†μ˜ νŠΉμ§• : μƒˆ λ©€λ²„μ˜ μΆ”κ°€ derived class(μžμ‹ 클래슀)λŠ” μžμ‹ λ§Œμ˜ μƒˆλ‘œμš΄ 멀버듀을 μ •μ˜ν•  수 μžˆλ‹€.    κ°€μ‹œμ„±(visibillity)    (1) Public Inheritanceμžμ‹ν΄λž˜μŠ€λŠ” λΆ€λͺ¨ν΄λž˜μŠ€λ₯Ό public으둜 상속 (ex 맨 첫 μ˜ˆμ œμ—μ„œμ˜ class Stu..

C++ 클래슀(Class)의 μ’…λ₯˜μ™€ 좔상 클래슀(abstract classes)

클래슀(Class)의 μ’…λ₯˜ 1. ꡬ체 클래슀(concrete classes)  ex) std::vector, std::string λ“±λ§ˆμΉ˜ λ‚΄μž₯ νƒ€μž…(int)처럼 μž‘λ™ν•¨. ꡬ체 νƒ€μž… μ •μ˜μ˜ μΌλΆ€λ‘œ λ©”λͺ¨λ¦¬ ν‘œν˜„μ΄ μ‘΄μž¬ν•¨.μŠ€νƒμ΄λ‚˜ λ‹€λ₯Έ 객체 μ•ˆμ— μœ„μΉ˜ν•  수 있음. ν¬μΈν„°λ‚˜ μ°Έμ‘°λ₯Ό κ±°μΉ˜μ§€ μ•Šκ³  객체λ₯Ό 직접 μ°Έμ‘°ν•  수 있음.객체λ₯Ό μ¦‰μ‹œ, 그리고 μ™„λ²½νžˆ μ΄ˆκΈ°ν™”ν•  수 있음. 객체λ₯Ό λ³΅μ‚¬ν•˜κ±°λ‚˜ 이동할 수 있음   2. 좔상 클래슀(abstract classes)  μ‚¬μš©μžμ—κ²Œ 상세 κ΅¬ν˜„μ„ μ™„μ „νžˆ 감좀. μΈν„°νŽ˜μ΄μŠ€μ™€ λ©”λͺ¨λ¦¬ ν‘œν˜„μ„ 뢄리함.μΆ”μƒνƒ€μž…μ„ μ§€μ—­λ³€μˆ˜λ‘œ μ‚¬μš©ν•  수 μ—†μŒ. νž™ μ˜μ—­μ— 객체λ₯Ό ν• λ‹Ήν•˜κ³  μ°Έμ‘°λ‚˜ ν¬μΈν„°λ‘œ 접근함.   3. 클래슀 계측ꡬ쑰 속 클래슀(Classes in class hierarchies)  클래..

C++ Generic Programming : ν…œν”Œλ¦Ώ(Templates)

Templates(ν…œν”Œλ¦Ώ)- 컴파일러λ₯Ό μœ„ν•œ νŒ¨ν„΄μ˜ μ’…λ₯˜- μ„œλ‘œ λ‹€λ₯Έ νƒ€μž…μ΄λ‚˜ κ°’μœΌλ‘œ ν…œν”Œλ¦Ώμ„ μΈμŠ€ν„΄μŠ€ν™” ν•  수 있음- ν…œν”Œλ¦Ώμ€ ν”„λ‘œκ·Έλž˜λ¨Έμ˜ μž‘μ—…μ„ 쀄여주며, μ•½κ°„ λ‹€λ₯Έ νƒ€μž… λ•Œλ¬Έμ— μ—¬λŸ¬ 번 ν•¨μˆ˜λ₯Ό κ΅¬ν˜„ν•˜μ§€ μ•Šμ•„λ„ 됨- ν…œν”Œλ¦Ώμ€ 항상 ν‚€μ›Œλ“œ template 으둜 μ‹œμž‘λ¨ μ˜ˆμ œ) cout cout (f1, f2)  μ΄μ²˜λŸΌ μ—¬λŸ¬ 번 ν•¨μˆ˜λ₯Ό κ΅¬ν˜„ν•˜μ§€ μ•Šκ³ λ„ λ‹€λ₯Έ νƒ€μž…μ„ μΈμ‹ν•˜κ²Œ ν•΄μ£ΌλŠ” 것이 ν…œν”Œλ¦Ώμ˜ μž₯점이닀.   μΈμŠ€ν„΄μŠ€ν™”λž€? - ν…œν”Œλ¦Ώμ„ μ‚¬μš©ν•˜λ©΄ μΈμŠ€ν„΄μŠ€(객체)ν™” λ˜λŠ”λ°, μ΄λŠ” μ»΄νŒŒμΌλŸ¬κ°€ ν…œν”Œλ¦Ώμ„ ꡬ체적인 인자둜 λŒ€μ²΄ν•˜κΈ° λ•Œλ¬Έ- μ»΄νŒŒμΌλŸ¬λŠ” ν•¨μˆ˜λ‘œ λ„˜κ²¨μ§„ μΈμžκ°’μ„ μ΄μš©ν•΄ ν…œν”Œλ¦Ώμ„ μžλ™μœΌλ‘œ μΈμŠ€ν„΄μŠ€ν™” ν•œλ‹€- μ»΄νŒŒμΌλŸ¬κ°€ 인자λ₯Ό κ²°μ •ν•˜μ§€ λͺ»ν•˜λ©΄ λͺ…μ‹œμ μœΌλ‘œ κΈ°μˆ ν•΄μ•Ό ν•œλ‹€     Specializations ν…œν”Œλ¦Ώ 객..

C++ μ—°μ‚°μž μ˜€λ²„λ‘œλ”©(Operator Overloading)

μ—°μ‚°μž μ˜€λ²„λ‘œλ”©(Operator Overloading)μ΄λž€?  μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ€ 말 κ·ΈλŒ€λ‘œ μ—°μ‚°μž(operator)의 λ™μž‘μ„ μƒˆλ‘œ μ •μ˜(μž¬μ •μ˜)ν•˜λŠ” 것이닀. 예λ₯Ό λ“€μ–΄, + μ—°μ‚°μžλŠ” 숫자끼리 더할 λ•Œ μ“°λŠ” 것인데 이 + μ—°μ‚°μžλ₯Ό μš°λ¦¬κ°€ λ§Œλ“  ν΄λž˜μŠ€μ—μ„œλ„ μ‚¬μš©ν•  수 μžˆκ²Œλ” λ™μž‘μ„ μƒˆλ‘œ μ •μ˜ν•˜λŠ” 것이닀. μƒˆλ‘œμš΄ νƒ€μž…(ν΄λž˜μŠ€λ‚˜ ꡬ쑰체)을 λ§Œλ“€ λ•Œ, κ·Έ νƒ€μž…μ— λŒ€ν•΄ +, -, *, / 같은 연산을 μžμ—°μŠ€λŸ½κ²Œ μ‚¬μš©ν•˜κ³  싢을 λ•Œκ°€ μžˆλ‹€. ( ex 두 개의 λ³΅μ†Œμˆ˜λ₯Ό 더할 λ•Œ c1 + c2처럼 κ°„λ‹¨ν•˜κ²Œ μ“°κ³  싢을 λ•Œ) 그런데, κΈ°λ³Έμ μœΌλ‘œλŠ” ν΄λž˜μŠ€μ— λŒ€ν•΄ + 같은 연산이 μ •μ˜λ˜μ–΄ μžˆμ§€ μ•Šμ•„μ„œ μ“Έ 수 μ—†λ‹€. λ”°λΌμ„œ 직접 + 연산이 μ–΄λ–»κ²Œ μž‘λ™ν• μ§€λ₯Ό μ •μ˜ν•΄ μ£ΌλŠ” 것을 μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ΄λΌκ³  ν•œλ‹€. μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ„ μ‚¬μš©ν•˜λ©΄ ..

C++ Shallow Copy(얕은 볡사)와 Deep Copy(κΉŠμ€ 볡사)

Shallow Copy(얕은 볡사) Shallow Copy(얕은 볡사)λŠ” λ©”λͺ¨λ¦¬ μ£Όμ†Œλ§Œ λ³΅μ‚¬ν•˜μ—¬, 원본 객체와 λ³΅μ‚¬λœ 객체가 같은 λ©”λͺ¨λ¦¬λ₯Ό κ³΅μœ ν•˜κ²Œ ν•œλ‹€. μ΄λŠ” μ˜λ„μΉ˜ μ•Šμ€ 데이터 변경을 μ΄ˆλž˜ν•  수 μžˆλ‹€.   객체의 λ°μ΄ν„°λ§Œ λ³΅μ‚¬ν•˜κ³ , κ·Έ 데이터가 κ°€λ¦¬ν‚€λŠ” μ°Έμ‘°(포인터)λ‚˜ λ©”λͺ¨λ¦¬ μ£Όμ†ŒλŠ” κ·ΈλŒ€λ‘œ λ³΅μ‚¬ν•˜λŠ” 방식. 즉, 얕은 λ³΅μ‚¬λŠ” λ³΅μ‚¬λœ 객체와 원본 객체가 같은 λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό κ³΅μœ ν•˜κ²Œ 되며, 이둜 인해 ν•˜λ‚˜μ˜ κ°μ²΄μ—μ„œ 데이터λ₯Ό λ³€κ²½ν•˜λ©΄, λ‹€λ₯Έ 객체도 영ν–₯을 받을 수 μžˆλ‹€. ex)#include class MyClass {public: int* data; // μƒμ„±μž MyClass(int value) { data = new int(value); } // 볡사 μƒμ„±μž(얕은..

C++ 객체 생성 κ·œμΉ™(생성, 볡사, 이동, μ†Œλ©Έ), μƒμ„±μž μ΄ˆκΈ°ν™”, μƒμ„±μž μ˜€λ²„λ‘œλ”©, μ •κ·œ νƒ€μž…

객체 μƒμ„±μž(Object Constructors)와 μ†Œλ©Έμž(Destructor) - μ˜¬λ°”λ₯΄κ²Œ λ™μž‘ν•˜λ €λ©΄ κΈ°λ³Έ 연산을 ν•˜λ‚˜λ„ κ΅¬ν˜„ν•˜μ§€ μ•Šκ±°λ‚˜ (0의 κ·œμΉ™) λͺ¨λ‘ κ΅¬ν˜„ (6의 κ·œμΉ™) ν•΄μ•Ό ν•œλ‹€ - κΈ°λ³Έ 연산을 μ •μ˜ν•˜μ§€ μ•Šμ•„λ„ 되면 κ·Έλ ‡κ²Œ ν•˜λΌ- κ°€μž₯ λ‹¨μˆœν•˜κ³ , λͺ…λ£Œν•œ 의미λ₯Ό μ€€λ‹€ - 볡사, 이동, μ†Œλ©Έμžμ˜ μ˜λ―ΈλŠ” μ„œλ‘œ λ°€μ ‘ν•˜κ²Œ μ—°κ΄€λ˜μ–΄ μžˆμ–΄, λ§Œμ•½ 이듀 쀑 ν•˜λ‚˜κ°€ μ„ μ–Έλ˜λ©΄, λ‹€λ₯Έ ν•¨μˆ˜λ“€λ„ κ³ λ €ν•  ν•„μš”κ°€ μžˆλ‹€- 볡사/이동/μ†Œλ©Έμž ν•¨μˆ˜λ₯Ό =default λ˜λŠ” =delete둜 μ„ μ–Έν•˜λ©΄, μ»΄νŒŒμΌλŸ¬λŠ” 이동 μƒμ„±μž 및 이동 ν• λ‹Ή μ—°μ‚°μžμ˜ λ¬΅μ‹œμ  선언이 μ•ˆλœλ‹€.- 이동 μƒμ„±μž λ˜λŠ” 이동 ν• λ‹Ή μ—°μ‚°μžλ₯Ό =default λ˜λŠ” =delete둜 μ„ μ–Έν•˜λ©΄, λ¬΅μ‹œμ μœΌλ‘œ μƒμ„±λœ 볡사 μƒμ„±μž λ˜λŠ” 볡사 ν• λ‹Ή μ—°μ‚°μžκ°€ μ‚­μ œλœ κ²ƒμœΌλ‘œ μ •..

C++ 클래슀(Class)와 friend ν•¨μˆ˜/클래슀, this 포인터

OOP(객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°)의 4가지 νŠΉμ„±(좔상화, μΊ‘μŠν™”, 상속, λ‹€ν˜•μ„±)C++λŠ” 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ° 언어이닀  OOP(객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°) 4가지 νŠΉμ„± 1. 좔상화 : μ–΄λ–€ νŠΉμ • 정보λ₯Ό ν‘œμ‹œν•΄μ•Ό ν•˜κ³  μ–΄λ–€ 정보λ₯Ό μˆ¨κ²¨μ•Όν•˜λŠ”μ§€ μ‹λ³„ν•˜λŠ” 데 도움이 λ˜λŠ” 기술  "핡심이 뭐codebunny99.tistory.com OOP의 속성 쀑, μΊ‘μŠν™”λŠ” μˆ¨κ²¨μ•Ό ν•  λ‚΄μš©μ„ 숨기고 ν‘œμ‹œν•  λ‚΄μš©μ„ ν‘œμ‹œν•˜λŠ” λ°©μ‹μœΌλ‘œ 정보λ₯Ό νŒ¨ν‚€μ§•ν•˜λŠ” 기술인데, ν΄λž˜μŠ€λŠ” μΊ‘μŠν™”(+정보은닉 : information hiding)의 λŒ€ν‘œμ μΈ μ˜ˆμ΄λ‹€.  클래슀 λ‚΄λΆ€μ—λŠ” 데이터와 λ©”μ„œλ“œκ°€ ν¬ν•¨λ˜μ–΄ 있으며, 이λ₯Ό μ™ΈλΆ€μ—μ„œ μ ‘κ·Όν•  수 μžˆλŠ”μ§€ μ—¬λΆ€λŠ” μ ‘κ·Ό μ œν•œμž(private, public, protected)에 따라 κ²°μ •λœλ‹€.μ ‘κ·Όμ œν•œμžκ°€ μ—†μœΌλ©΄ def..

OOP(객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°)의 4가지 νŠΉμ„±(좔상화, μΊ‘μŠν™”, 상속, λ‹€ν˜•μ„±)

C++λŠ” 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ° 언어이닀  OOP(객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°) 4가지 νŠΉμ„± 1. 좔상화 : μ–΄λ–€ νŠΉμ • 정보λ₯Ό ν‘œμ‹œν•΄μ•Ό ν•˜κ³  μ–΄λ–€ 정보λ₯Ό μˆ¨κ²¨μ•Όν•˜λŠ”μ§€ μ‹λ³„ν•˜λŠ” 데 도움이 λ˜λŠ” 기술  "핡심이 뭐야?" "μ–΄λŠ λ ˆλ²¨μ—μ„œ μ„€λͺ… λ“œλ¦΄κΉŒμš”?"   - μ ˆμ°¨λ‘œμ„œμ˜ 좔상화 : μ„ΈλΆ€ 사항을 λ¬΄μ‹œν•˜λ©΄μ„œ ν•„μˆ˜ 정보λ₯Ό μΆ”μΆœ   - 싀체(entity)λ‘œμ„œμ˜ 좔상화 : μ‹€μ œμ— λŒ€ν•œ λͺ¨λΈ(model), λ·°(view), ν‘œν˜„(representation)  2. μΊ‘μŠν™” : μˆ¨κ²¨μ•Ό ν•  λ‚΄μš©μ„ 숨기고 ν‘œμ‹œν•  λ‚΄μš©μ„ ν‘œμ‹œν•˜λŠ” λ°©μ‹μœΌλ‘œ 정보λ₯Ό νŒ¨ν‚€μ§•ν•˜λŠ” 기술    (ex ν•¨μˆ˜, 클래슀, λͺ¨λ“ˆ λ“± "μΊ‘μŠν™”λœ λͺ¨λ“  것이 숨겨져 μžˆλŠ”κ°€?")   - μ ˆμ°¨λ‘œμ„œμ˜ μΊ‘μŠν™” : 물리적, λ…Όλ¦¬μ μœΌλ‘œ λ‘˜λŸ¬μ‹ΈλŠ” ν–‰μœ„   - μ—”ν‹°ν‹°λ‘œμ„œμ˜ μΊ‘μŠν™” : νŒ¨ν‚€μ§€ 혹..