일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- knapsack Problem
- 프로세스 상태
- 3D RPG
- algorithm
- Zenject
- SWEA
- programmers
- 프로그래머스
- 8-Puzzle
- trie
- Flyweight Pattern
- Bronze
- Unity
- level3
- level1
- Project
- solid 원칙
- Silver
- LEVEL2
- PrefixSum
- binary search
- stack
- Gold
- Modern C++
- effective C++
- Euclidean
- two pointer
- BFS
- BOJ
- dirtyflag pattern
- Today
- Total
목록Programming Language/C++ (8)
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) { ... } // ..
모든 C++ 표현에는 형식이 존재하며 value 범주에 속한다. value 범주는 표현 평가 중 임시 개체를 생성, 복사, 이동할 때 컴파일러가 따라야하는 규칙의 기초이다. C++17표준은 다음과 같이 식 값의 범주를 정의한다. 1. glvalue는 평가(evaluation)에서 개체, 비트필드 또는 함수의 ID(동일성)를 결정하는 표현 2. prvalue는 평가에서 객체나 비트 필드를 초기화하거나 표시되는 컨텍스트에 지정된대로 연산자의 피연산자 값을 계산하는 표현식 3. xvalue는 리소스를 재사용할 수 있는 개체 또는 비트 필드를 나타내는 glvalue 4. lvalue는 xvalue가 아닌 glvalue 5. rvalue는 prvalue 또는 xvalue lvalue에는 프로그램에서 액세스할 수 ..
개요 급히 Modern C++에 대해 공부해야할 일이 생겨 간단하게 인터넷을 통해서 숙지하고자 게시글을 정리한다. 자료는 TCP School에서 참고하여 정리하였으며, 좀 더 자세한 내용을 확인하고 싶으면 아래 참고 자료 링크에 들어가면 된다. 스마트 포인터? C++에서 new 키워드를 사용해 동적으로 할당받은 메모리는 반드시 delete를 사용해 해제해야 한다. C++에서는 메모리 누수로부터 프로그램 안전성을 보장하기 위해 스마트포인터를 제공한다. 스마트 포인터는 포인터처럼 동작하는 클래스 템플릿으로, 사용이 끝난 메모리를 자동으로 해제해준다. ◆ 동작 보통 new 키워드를 이용해 원시 포인터가 실제 메모리를 가리키도록 초기화한 후 원시 포인터를 스마트 포인터에 대입하여 사용한다. 정의된 스마트 포인터..
개요 시간이 지남에 따라 Modern C++가 발전하고 있는 상태이다. 내가 제대로 배운 언어는 일반 C++였으며, 조금 더 C++에 대해 깊게 공부하기 위해 간략하게 준비를 하고자 한다. 본 게시글은 계속해서 정리하는 글이 아닌, 개요만 살짝 맛보는 시간이다. Modern C++의 자세한 공부는 Effective C++의 공부가 끝나는대로 바로 진행할 예정이다. C++는 다른 언어보다 유연성이 높다. 높은 추상화(abstract)는 물론 회로 설계에도 사용가능하다. C++는 최적화된 표쥰 라이브러리를 제공한다. 이를 통해 낮은 하드웨어 기능에 액세스해 속도를 최대한으로 높이고 메모리 요구 사항을 최소화할 수 있다. 이처럼 C++은 다른 언어에 비해 메모리 접근성에 대해도 좋으며, 그만큼 좋은 성능 대비..
개요 분량이 많아지다 보니 나눠서 작성하게 되었다. 3, 4항목만 정리한다. 내가 알고 있던 C++보다 훨씬 깊게 배워 읽는 속도가 느려 정리가 늦어진다. 빠르게 한다기 보다, 이해를 목적으로 천천히 정리하려고 한다. Item 3: 낌새만 보이면 const를 들이대 보자 const는 여러 방면에서 쓰인다. 클래스 외부에서는 전역 혹은 네임스페이스 유효 범위의 상수를 선언하는데 쓸수 있다. 이뿐만 아니라, 파일, 함수, 블록 유효 범위에서 static으로 선언한 객체에서도 const를 붙일 수 있다. 클래스 내부에서는 정적 멤버 및 비정적 데이터 멤버 모두를 상수로 선언할 수 있다. 또한 포인터는 포인터 자체를 상수로, 혹은 포인터가 가리키는 데이터를 상수로 지정할 수 있다. 여기서 둘 다 지정할 수 있고..
개요 C++에 관련하여 조금 더 효과적이고 심도있게 공부하기 위해 관련 서적을 구매하여 공부할 예정이다. 서적은 C++를 조금 더 잘 설계하고 활용하고자 스콧 마이어스의 를 선정하였다. 앞으로 정리해야할 부분은 블로그에 차근차근 작성할 예정이다. Item 1 : C++를 언어들의 연합체로 바라보는 안목은 필수 C에서 파생된 C++는 초기와 다르게 점차 발전하여 다중패러다임 프로그래밍 언어(multiparadigm programming language)라고 불린다. 절차적, 객체지향적, 함수식, 일반화 프로그래밍을 포함해 메타프로그래밍 개념까지 지원한다. 위와 같은 유연함 덕분에 C++는 소프트웨어 개발에 매우 적절하다. 하지만 사용하기까지 C++의 이해도는 높아야 한다. C++를 조금 더 잘 이해하기 위..