일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- two pointer
- binary search
- Gold
- stack
- Bronze
- level3
- SWEA
- Silver
- programmers
- 프로세스 상태
- 8-Puzzle
- BOJ
- 프로그래머스
- PrefixSum
- trie
- Euclidean
- LEVEL2
- 3D RPG
- Project
- level1
- Flyweight Pattern
- Zenject
- Unity
- algorithm
- solid 원칙
- knapsack Problem
- BFS
- dirtyflag pattern
- Modern C++
- effective C++
- Today
- Total
목록effective C++ (5)
Patrick's Devlog
Item 13 : 자원 관리에는 객체가 그만 투자를 모델링하는 클래스 라이브러리를 가지고 어떤 작업을 한다고 가정하자. 이 라이브러리는 Investment라는 최상위 클래스가 있으며, 이를 기본으로 해 구체적인 형태의 투자 클래스가 파생되어 있다. 또 여기서 이 라이브러리는 Invetment에서 파생된 클래스의 객체를 사용자가 얻어내는 용도로 팩토리 함수만을 쓰도록 만들어져 있음을 가정한다. class Investment { .. } // 여러 형태 투자를 모델링한 최상위 클래스 Investment * createinvestment(); // Investment 클래스 계통에 속한 클래스의 객체 동적할당 및 포인터 반환 // 이 객체 해제는 호출자 쪽에서 직접 해야함 (매개변수 생략) creativeIn..
Item 9 : 객체 생성 및 소멸 과정 중에는 절대로 가상 함수를 호출하지 말자 객체 생성, 소멸 중에는 가상함수를 호출해선 안된다. 호출 결과가 원하는대로 돌아가지 않을 수 있다. 주식 거래를 본떠 만든 클래스 계통 구조가 있다고 가정하자. 주식 거래이므로 매도, 매수 주문 등이 존재할 것이다. 이러한 거래를 모델링하는 데 있어서 중요한 포인트는 감사 기능이다. 그러므로 주식 거래 객체가 생성될 때마다 감사 로그에 적절한 거래 내역이 만들어지도록 해야한다. 아래의 예시를 확인해보자. public Transaction { // 모든 거래에 대한 기본 클래스 public: Transaction(); virtual void logTransaction() const = 0; // 타입에 따라 달라지는 로그 ..
Item 5 : C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자 C++에서 복사 생성자(copy constructor), 복사 대입 연산자(copy assignment operator), 소멸자(destructor)를 클래스 안에 직접 선언해 넣지 않으면 컴파일러가 저절로 선언해주도록 되어있다. 이때 컴파일러가 만드는 함수의 형태는 기본형이며 생성자조차 선언되어 있지 않으면 컴파일러가 선언해놓는다. 모두 public 멤버이며, inline 함수이다. class Empty{}; 위와같이 썼다면 다음과 같이 쓴것과 근본적으로 대동소이하다는 의미다. class Empty { public: Empty() { ... } // 기본생성자 Empty(const Empty& rhs) { ... } // ..
개요 분량이 많아지다 보니 나눠서 작성하게 되었다. 3, 4항목만 정리한다. 내가 알고 있던 C++보다 훨씬 깊게 배워 읽는 속도가 느려 정리가 늦어진다. 빠르게 한다기 보다, 이해를 목적으로 천천히 정리하려고 한다. Item 3: 낌새만 보이면 const를 들이대 보자 const는 여러 방면에서 쓰인다. 클래스 외부에서는 전역 혹은 네임스페이스 유효 범위의 상수를 선언하는데 쓸수 있다. 이뿐만 아니라, 파일, 함수, 블록 유효 범위에서 static으로 선언한 객체에서도 const를 붙일 수 있다. 클래스 내부에서는 정적 멤버 및 비정적 데이터 멤버 모두를 상수로 선언할 수 있다. 또한 포인터는 포인터 자체를 상수로, 혹은 포인터가 가리키는 데이터를 상수로 지정할 수 있다. 여기서 둘 다 지정할 수 있고..
개요 C++에 관련하여 조금 더 효과적이고 심도있게 공부하기 위해 관련 서적을 구매하여 공부할 예정이다. 서적은 C++를 조금 더 잘 설계하고 활용하고자 스콧 마이어스의 를 선정하였다. 앞으로 정리해야할 부분은 블로그에 차근차근 작성할 예정이다. Item 1 : C++를 언어들의 연합체로 바라보는 안목은 필수 C에서 파생된 C++는 초기와 다르게 점차 발전하여 다중패러다임 프로그래밍 언어(multiparadigm programming language)라고 불린다. 절차적, 객체지향적, 함수식, 일반화 프로그래밍을 포함해 메타프로그래밍 개념까지 지원한다. 위와 같은 유연함 덕분에 C++는 소프트웨어 개발에 매우 적절하다. 하지만 사용하기까지 C++의 이해도는 높아야 한다. C++를 조금 더 잘 이해하기 위..