[C++] RTTI(Run Time Type Information)
Β·
πŸ“ Language/✏ C & C++
RTTI(Run Time Type Information) C++μ—μ„œλŠ” λŸ°νƒ€μž„μ— 기초 클래슀의 객체 포인터가 μ–΄λ–€ 객체λ₯Ό 가리킀고 μžˆλŠ”μ§€ 정보λ₯Ό μ•Œλ €μ£ΌλŠ” RTTI κΈ°λŠ₯을 μ œκ³΅ν•œλ‹€. 객체 지ν–₯에선 클래슀 κ°„ 상속을 κ΅¬ν˜„ν•  수 있고, λ‹€ν˜•μ„±μ„ κ°€μ§€κ²Œ λ˜μ–΄ 기초 ν΄λž˜μŠ€λŠ” μžμ‹ μ˜ 멀버λ₯Ό μœ„μž„ν•œ νŒŒμƒ 클래슀λ₯Ό μžμ‹ μ˜ 객체 ν¬μΈν„°λ‘œ 가리킬 수 μžˆλ‹€. Base *pBase = new Derived(); 컴파일 λ‹Ήμ‹œμ—λŠ” pBaseκ°€ μ–΄λ–€ 객체λ₯Ό 가리킀고 μžˆλŠ”μ§€ μ•Œ 수 μ—†λ‹€. κ·Έμ € 기초 ν΄λž˜μŠ€μ™€ νŒŒμƒ 클래슀 쀑 μ–΄λ–€ 객체λ₯Ό 가리킀고 μžˆλŠ”μ§€ μ§μž‘λ§Œ ν•  수 μžˆλ‹€. μ΄λŸ¬ν•œ 정보λ₯Ό μ•Œλ €μ£ΌλŠ” 것이 RTTI이고 ν˜„μž¬ 객체 포인터가 가리킀고 μžˆλŠ” 객체 νƒ€μž… 정보λ₯Ό type_infoλΌλŠ” μ΄λ¦„μœΌλ‘œ vftable에 μ €μž₯ν•œλ‹€. 1. dyna..
[C++] μ—°μ‚°μž μ˜€λ²„λ‘œλ”©(Operator Overloading)
Β·
πŸ“ Language/✏ C & C++
μ—°μ‚°μž μ˜€λ²„λ‘œλ”©(Operator Overloading) κΈ°μ‘΄ μ œκ³΅ν•˜κ³  μžˆλŠ” μ—°μ‚°μžλ₯Ό μž¬μ •μ˜ν•˜μ—¬ μ‚¬μš©μž μ •μ˜ 클래슀둜 μ‚¬μš©ν•˜λŠ” 것을 λ§ν•œλ‹€. μƒˆλ‘œμš΄ μ—°μ‚°μžλ₯Ό μ •μ˜ν•  μˆ˜λŠ” μ—†λ‹€. κΈ°λ³Έ 제곡 데이터 ν˜•μ‹μ— μ μš©ν•  λ•Œ μ—°μ‚°μžμ˜ 의미λ₯Ό λ‹€μ‹œ μ •μ˜ν•  수 μ—†λ‹€. 멀버 ν•¨μˆ˜λ‘œ μ˜€λ²„λ‘œλ“œλœ μ—°μ‚°μžμ˜ 첫 번째 νŒŒλΌλ―Έν„°λŠ” 항상 μ—°μ‚°μžκ°€ ν˜ΈμΆœλ˜λŠ” 객체의 클래슀 ν˜•μ‹μ΄λ‹€. 1. κ΅¬ν˜„ κ°€μž₯ λ‹¨μˆœν•œ λ§μ…ˆ μ—°μ‚°μžλ₯Ό 예둜 κ΅¬ν˜„ν•΄λ³΄μž. 1) 멀버 ν•¨μˆ˜ p1+p2λŠ” p1.operator+(p2)와 κ°™λ‹€. 멀버 ν•¨μˆ˜μ™€ μ „μ—­ ν•¨μˆ˜κ°€ λ‘˜ λ‹€ 같은 λ°©μ‹μœΌλ‘œ μ˜€λ²„λ‘œλ”© λ˜μ–΄μžˆλ‹€λ©΄ 멀버 ν•¨μˆ˜κ°€ μš°μ„ μ‹œλœλ‹€. νŠΉμ • μ˜›λ‚  μ»΄νŒŒμΌλŸ¬μ—μ„  이런 상황에 였λ₯˜λ₯Ό λ°œμƒμ‹œν‚¬ 수 μžˆμœΌλ―€λ‘œ μ›¬λ§Œν•˜λ©΄ 멀버 ν•¨μˆ˜λ‘œ μ˜€λ²„λ‘œλ”©ν•˜λŠ” 것이 μ’‹λ‹€. #include using names..
[C++] λ¬Έμžμ—΄ 슀트림(stringstream)
Β·
πŸ“ Language/✏ C & C++
λ¬Έμžμ—΄ 슀트림 λ¬Έμžμ—΄μ— μ—¬λŸ¬ 가지 μžλ£Œν˜•μ΄ 듀어왔을 λ•Œ μš©λ„μ— 맞게 νŒŒμ‹±ν•˜κΈ° μœ μš©ν•˜λ‹€. 헀더 #include μ½”λ”© ν…ŒμŠ€νŠΈμ—μ„œ λ¬Έμžμ—΄μ„ 풀이할 λ•Œ C++ string만으둜 ν•΄κ²°ν•˜κΈ°μ—” μž‘μ€ 어렀움이 μžˆλ‹€. 1. λ¬Έμžμ—΄ 슀트림 1) stringstream μž…μΆœλ ₯ 슀트림: μž…λ ₯ 슀트림, 좜λ ₯ μŠ€νŠΈλ¦Όμ„ λͺ¨λ‘ ν•  수 μžˆλ‹€. 2) istringstream μž…λ ₯ 슀트림 λ¬Έμžμ—΄μ„ 곡백과 '\n'을 κΈ°μ€€μœΌλ‘œ μ—¬λŸ¬ 개의 λ‹€λ₯Έ ν˜•μ‹μœΌλ‘œ μ°¨λ‘€λŒ€λ‘œ 뢄리할 λ•Œ νŽΈλ¦¬ν•˜λ‹€. 반볡문 μ‹€ν–‰ μ‹œ μžλ£Œν˜•μ— λ§žλŠ” 데이터가 없을 λ•ŒκΉŒμ§€ μ‹€ν–‰λœλ‹€. #include #include #include using namespace std; int main() { istringstream iss("test\n123 aaa 456"); string s1, ..
[C++] l-value와 r-value
Β·
πŸ“ Language/✏ C & C++
l-value와 r-value μ™Όμͺ½ κ°’, 였λ₯Έμͺ½ κ°’μ΄λž€ λ‹¨μ–΄μ˜ μ˜λ―ΈλŠ” 맀우 μ§κ΄€μ μœΌλ‘œ λ“±ν˜Έ(=)의 μ™Όμͺ½μ— 있으면 left value, 였λ₯Έμͺ½μ— 있으면 right value이닀. 1. l-value 이름을 가진 λ³€μˆ˜λ‘œ ν‘œν˜„μ‹ 이후에도 사라지지 μ•ŠλŠ”λ‹€. 2. r-value μž„μ‹œ λ³€μˆ˜λ‘œ ν‘œν˜„μ‹ 이후에 사라진닀. 1) x++이 μ™œ r-value일까? x의 값을 λ³΅μ‚¬ν•˜μ—¬ μž„μ‹œ λ³€μˆ˜(r-value)에 μ €μž₯ν•˜κ³  μ›λž˜ x의 κ°’(l-value)을 λ³€κ²½ν•œλ‹€. κ·Έ ν›„ μž„μ‹œ λ³€μˆ˜λ₯Ό 계산에 μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— r-value이닀. & μ—°μ‚°μžλŠ” l-value의 μ£Όμ†Œλ₯Ό κ°€μ Έμ˜€λŠ” μ—°μ‚°μžμ΄λ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— & μ—°μ‚°μžλ₯Ό r-value에 μ‚¬μš©ν•˜λ©΄ 컴파일 μ—λŸ¬λ‚˜ λ‚œλ‹€.
[C/C++] malloc()과 new의 차이
Β·
πŸ“ Language/✏ C & C++
malloc()κ³Ό new의 차이 1. ν•¨μˆ˜μ™€ μ—°μ‚°μž Cμ—μ„œλŠ” 동적 할당을 μœ„ν•΄ malloc()κ³Ό free() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•œλ‹€. C++μ—μ„œλŠ” 동적 할당을 μœ„ν•΄ new와 delete μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•œλ‹€. λ‹¨μˆœν•˜κ²Œ malloc()은 ν•¨μˆ˜μ΄κ³  newλŠ” μ—°μ‚°μžμ΄λ‹€. 그리고 malloc()은 λΌμ΄λΈŒλŸ¬λ¦¬κ°€ μ œκ³΅ν•˜λŠ” ν•¨μˆ˜μ΄μ§€λ§Œ newλŠ” λ³„λ„μ˜ 라이브러리 없이 μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€. 2. μ΄ˆκΈ°ν™” malloc()은 동적 ν• λ‹Ήν•˜λŠ” κ²ƒλ§Œμ΄ λͺ©μ μ΄λ―€λ‘œ μ΄ˆκΈ°ν™”λ₯Ό ν•  수 μ—†λ‹€. newλŠ” ν• λ‹Ήκ³Ό λ™μ‹œμ— μ΄ˆκΈ°ν™”κ°€ κ°€λŠ₯ν•˜λ‹€ 3. μƒμ„±μž newλŠ” μƒμ„±μžλ₯Ό μžλ™μœΌλ‘œ ν˜ΈμΆœν•˜κ²Œ λœλ‹€. λ§ˆμ°¬κ°€μ§€λ‘œ deleteλ₯Ό ν˜ΈμΆœν•˜λ©΄ μ†Œλ©Έμžκ°€ μžλ™μœΌλ‘œ ν˜ΈμΆœλœλ‹€.
[C++] OOP μ†Œλ©Έμžμ˜ virtual ν‚€μ›Œλ“œ
Β·
πŸ“ Language/✏ C & C++
객체지ν–₯의 νŠΉμ„± 쀑 λ‹€ν˜•μ„±μ˜ κ°œλ…μ„ μ μš©ν•œ 것이닀. λ‹€ν˜•μ„±μ€ 각각의 객체λ₯Ό κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄ ν•¨μˆ˜μ— 쓰기도 ν•˜μ§€λ§Œ μ†Œλ©Έμžμ—λ„ μ‚¬μš©λœλ‹€. 클래슀 λ‚΄ μ†Œλ©Έμžμ—λŠ” μ™œ virtual ν‚€μ›Œλ“œκ°€ λΆ™μ„κΉŒ? λ¨Όμ €, μƒμ†μ—λŠ” 3가지 관계가 μ‘΄μž¬ν•œλ‹€. is-a: 데이터 ν˜•μ€ λΆ€λͺ¨ 클래슀둜 μ„ μ–Έν•˜κ³  생성은 μžμ‹ 클래슀둜 ν• λ‹Ήν•œλ‹€. λΆ€λͺ¨ 클래슀의 λ³€μˆ˜μ™€ ν•¨μˆ˜λ§Œ ν˜ΈμΆœν•  수 μžˆλ‹€. λ§Œμ•½, μžμ‹ ν΄λž˜μŠ€μ— Override ν•œ ν•¨μˆ˜κ°€ μ‘΄μž¬ν•œλ‹€λ©΄ κ·Έ ν•¨μˆ˜λŠ” 호좜 κ°€λŠ₯ν•˜λ‹€. has-a: μ†Œμœ κ΄€κ³„λ‘œμ„œ λ‹€λ₯Έ 객체λ₯Ό ν¬ν•¨ν•˜μ—¬ κ·Έ 객체의 κΈ°λŠ₯(λ³€μˆ˜, ν•¨μˆ˜)을 μ‚¬μš©ν•œλ‹€. 생성 μ‹œ 상속받은 λΆ€λͺ¨ ν΄λž˜μŠ€λΆ€ν„° ν˜ΈμΆœν•˜κ³  μ†Œλ©Έ μ‹œ μžμ‹ ν΄λž˜μŠ€λΆ€ν„° ν˜ΈμΆœλœλ‹€. is implemented of #include using namespace std; class Has..