일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- new&delete
- diamond inheritance
- operator overloading
- placement new
- virtual function table
- constructor
- 더 지니어스 양면포커
- C++
- vector capacity
- virtual inheritance
- this call
- return by reference
- discord bot
- dynamic_cast
- c++ basic practice
- virtual function
- virtual destructor
- std::cout
- suffix return type
- increment operator
- std::ostream
- vector size
- delete function
- std::vector
- c++ multi chatting room
- pointer to member data
- member function pointer
- conversion constructor
- std::endl
- base from member
- Today
- Total
목록C++ (57)
I'm FanJae.
1. stack unwinding#include struct Object { ~Object() { std::cout - 예제의 호출이 상당히 복잡해 보이지만, 실제로는 크게 어렵지 않은 내용이다.- 이들의 호출 관계를 조금 더 그림으로 표현해보면 아래와 같다.- 이 예제는 결국 f3()에서 throw가 일어남에 실행 결과를 보면, finish는 출력되지 않는다.void f3() { std::cout - 즉, 달리 말하면 f3()에서 바로 main 함수로 돌아왔다.- 그렇다면, f2, f1()에 있던 객체는 파괴 될것인가 파괴되지 않을 것인가? 에 대해 생각해볼 수 있다.- 이제야 실행 결과를 올려보면 아래와 같다.1-1. Stack unwinding(스택 풀기)란?- 이처럼 예외가 발생해서 catch로..
1. Error Handlingvoid db_backup(){ // 서버에 접속해서 DB를 백업하는 // 기능 수행하다가 오류가 발생했다면?}void db_clear(){}int main(){ db_backup(); db_clear();}- 함수에서 특정 기능을 수행하는 도중 오류가 발생하여, 처리해야 하는 경우 어떻게 할 것인가?① 함수 내에서 프로그램(프로세스)를 종료 - std::exit() 등의 함수 사용- 보통, 심각한 경우 사용한다.② 호출자에게 오류가 발생했음을 알린다.- 일반적인 상황에서 많이 사용한다. 1-2. 호출자에서 함수가 실패 했음을 알리는 방식① 약속된 함수 반환 값(-1 등)으로 실패 전달.- C 언어 및 대부분의 언어에서 사용② 예외(Excep..
1. Algorithm#include #include #include int main(){ std::list s = {1,2,3,4,5}; std::vector v = {1,2,3,4,5}; // 각 컨테이너에서 3을 검색하고 싶다고 할때 어떻게 할까}- 컨테이너에 검색기능을 추가한다고 가정해보자 ① 멤버 함수 find를 제공s.find(3);v.find(3);(1) 장점- 사용하기 쉽다 (2) 단점- 이 방법은 사용하기는 쉽지만, 동일한 기능을 하는 모든 컨테이너에 넣어야 한다.- 또한, 새로운 함수(기능)을 추가혀려면 모든 컨테이너에 추가해야 한다. ② 멤버 함수가 아닌 일반 함수(템플릿) 형태로 find를 제공std::find(s.begin(), s.end(), 3);std::f..
1.반복자(iterator)#include #include int main(){ int x[5] = {1,2,3,4,5}; int* p1 = x; ++p1; std::cout - 배열은 연속된 메모리이다.- 1번째 요소의 주소를 담은 포인터 변수만 있으면, ++, * 연산으로 모든 요소에 접근할 수 있다.- 반면 일반적인 list는 연속된 메모리가 아니므로 ++연산등을 통한 요소 접근은 불가능하다.- 그러나, std::list는 연속된 메모리가 아니지만, 반복자(iterator)만 있으면 ++, * 연산으로 모든 요소에 접근이 가능하다.- p2 자체가 포인터는 아니다.- 내부적으로 포인터 멤버 데이터가 있고, operator++, operator* 연산자를 재정의해 포인터처럼..
1. vector capacity vs size#include #include void check(const std::vector& v) { std::cout size 이므로 // 빠르게 동작 check(v); // c : 5 s : 4 v.shrink_to_fit(); check(v); // c : 4 s : 4 v.push_back(0); // capacity == size 이므로 메모리 재할당 필요 // 느리다. check(v); // c : ? s : 5 v.clear(); // 메모리를 제거하지는 않음. // size 만 0으로 check(v); v.resize(0); // 또는 v.clear() v.shrink_to_fit(); check(v);}- v..
본 포스트는 코드누리 C++ Basic 강의 내용을 보고 정리한 포스트입니다. - Basic에서는 STL에서 가장 기본이 되는 얘기만 다뤄진다.- 이후 별도 STL 카테고리에서 STL에 대해서 조금 더 다양한 얘기를 할 것이다.- 여기서는 C++ 개발자가 알아야하는 핵심 내용이나 사용법 위주로 다룬다. 1. STL의 역사- 1983년 처음 발표되고, C++ 1차 표준 (C++98) 발표 및 자료 구조와 알고리즘 위주의 라이브러리가 추가되었다.- 이후 C++11 / 14 / 17에 thread, smart pointer, chrono, file 등이 추가된다.- C++ 20에는 Range, Concept 등의 라이브러리가 추가된다.- C++ 23 / 26에서 generator, excepted, Netwo..
※ 본 포스트는 코드누리 C++ Basic 강의 내용을 보고 정리한 포스트입니다. 1. -> 연산자 재정의를 통한 Smart Pointer#include class Car{ int color;public: ~Car() { std::cout () { return obj;} Car& operator*() { return *obj;}};int main(){ Ptr p ( new Car ) ; // p는 객체, 타입 Ptr // Ptr의 객체 p가 Car* 역활을 수행 p->go(); // p.operator->()go() // (p.operator->())->go() (*p).go();}- 이 예제를 보면,..
※ 본 포스트는 코드누리 C++ Basic 강의 내용을 보고 정리한 포스트입니다. 1. std::cout의 원리#include int main(){ std::cout 1-1. std::cout의 원리- std::ostream 타입의 객체이다.- operator연산자 재정의 기술을 사용하여 재정의 한 것이다.#include /*namespace std{ class ostream { }; ostream cout;}*/int main(){ std::cout - 즉, 실제로는 std namespace안에 ostream이라는 class가 존재한다는 것이다.- 또한 std::cout은 std::cout.operator ※ 정확히 말하면, basic_ostream 이..
※ 본 포스트는 코드누리 C++ Basic 강의 내용을 보고 정리한 포스트입니다. 1. 증가(++) 연산자(Increment Operator)#include class Point{public: int x{0}; int y{0}; Point() = default; Point(int x, int y) : x{x}, y{y} { }};int main(){ int n = 3; ++n; Point p{1,1}; ++p;}- 일반적으로 객체를 ++한다는 것이 조금 이상해 보일 수 있지만, 학습을 위해서 해보고자 한다.- 증가(++) / 감소(--) 연산자 재정의가 사용되는 예는 C++ 표준 라이브러리인 STL의 반복자가 사용한다. 1-1. 증감 연산자 재정의..
※ 본 포스트는 코드누리 C++ Basic 강의 내용을 보고 정리한 포스트입니다. 1. 연산자 재정의(Operator Overloading)class Point{ int x{0}; int y{0};public: Point() = default; Point(int x, int y) : x{x}, y{y} {}};int main(){ Point p1{1, 1}; Point p2{2, 2}; int n1 = 10 + 20; // ok Poiint p3 = p1 + p2; // ?}- 연산자 재정의(Operator Overloading) 이라는 것은 사용자 정의 타입의 객체에 대해서도 +, - 등의 연산자를 사용할 수 있게 하는 문법이다.Point p3 = p1..