오랫동안 블로그에 글을 안 썼는데 이번 2월에 학사 졸업을 따고 스타트업에 서버팀 인턴으로 들어갔다가 어쩌다 넣은 대기업에 합격해 임베디드 엔지니어로 반강제로 전향하게 되었다.그러면서 회사 동기들과 cpp 스터디를 함께 시작하게 되었는데 내용은 다음과 같다.cpp 역량
스터디 규칙 상세 결정 및 컨펌, 피드백3장 c++ 참조자 래퍼런스 30p ~ 46p5장 객체지향 프로그래밍(oop) 57p - 187p과제: ??6장 연산자 오버로딩(overloading) 188p - 269p7장 클래스의 상속 270p - 297p과제: 6장 생각해
지금까지는 두 가지 변수 타입(일반 변수, 포인터)을 공부했다.일반 변수: 직접 값을 보유포인터: 다른 값의 주소(또는 null)을 보유지금부터 보게 될 참조형은 다른 객체 또는 값의 별칭으로 사용되는 C++ 타입으로,C++은 non-const 값 참조형, const
키워드 명시를 하지 않으면 알아서 private으로 설정이 됨.생각해볼 문제 문제 1: pg.73(페이지 명시:68) 나쁘지 않은 듯C++에서는 함수의 이름이 같더라도 인자가 다르면 다른 함수라고 판단함.
기존 생성자보다 훨씬 줄어든 코드 길이로 같은 기능을 동작할 수 있음.(생성자 이름): var1(arg1), var2(arg2) {}위 경우에서 var1 이름 == argv1 이름 이어도 정상적으로 동작함.\-> 이유: coord_x를 동일 이름이라고 둘 때(var1
내가 만들어보는 문자열 클래스 문자로부터의 문자열 생성, C 문자열 (char *)로부터의 생성 문자열 길이를 구하는 함수 문자열 뒤에 다른 문자열 붙이기 문자열 내에 포함되어 있는 문자열 구하기 문자열이 같은 지 비교 문자열 크기 비교(사전순) 문자열 클래스를
객체 MyString을 인자로 받는 함수를 생각해보자.이때 MyString은 다음과 같은 형태의 클래스의 객체다.이때 DoSomethingWithString이라는 함수가 아래와 같이 객체 s를 인자로 가진다고 하자.이때,DoSomethingWithString("abc"
친한 동기가 퇴사를 했다.. 슬프다. 연산자 오버로딩은 실무에서 크게 쓰이지 않는데다가, 우선순위상 상대적으로 밀린다. 따라서 이번 연산자 오버로딩은 블로그에서 상세하게 다루는 것보다는 그냥 적당히 나중에 검색을 위한 정도로 작성하려고 한다.
int, double 변수와의 덧셈을 수행할 때 int형 변수가 자동으로 double 변수로 캐스팅되는 경우에 해당void \* 타입의 주소를 특정 구조체 포인터 타입의 주소로 바꾸는 경우에 해당(예시)(문제)말도 안되는 캐스팅에 대해서 컴파일러가 오류를 발생시키지 않
이때 차장 이상 급들은 관리데이터에 근속 년수를 포함시켜서 월급에 추가해달라는 요청이 들어옴.\-> 이럴 경우 Manager 클래스를 추가하면서 Employee 클래스와 비슷하게 만들되, calculate_pay 함수부분을 다르게 해야 한다.=> 그런데 calculat
모든 상속 관계는 is-a 관계이다.이를 뒤바꾸면 성립되지 않는다.클래스가 파생되면 파생될 수록 좀 더 특수화가 된다.반대로, 기반 클래스로 거슬러 올라가면 올라갈 수록 좀 더 일반화된다.또 다른 클래스 간의 관계로, has-a 관계 역시 존재한다.has-a 관계는 보
는 아래에 정의되는 클래스에 대해 템플릿을 정의하고, 템플릿 인자로 T 를 받게 되며, T 는 반드시 어떠한 타입의 이름임을 명시함.이때 아래에 함수가 온다면 이 함수에 대한 템플릿을 정의하는 것임.위와 같이 초기화함.위 코드는 Vector의 T가 int로 치환된 클래
템플릿을 사용해서 임의의 개수의 인자를 받아 보자.템플릿 파라미터 팩(parameter pack): typename 뒤에 ... 으로 오는 것함수 파라미터 팩: 함수에 인자로 ...으로 오는 것둘의 차이템플릿: 타입 앞에 ...이 옴함수: 타입 뒤에 ...이 옴위 코드
일반화 프로그래밍: 템플릿을 통해 타입이 마치 인자인 것처럼 사용하는 것그럼 Array<int, 5> Array<int, 3> 이 2개는 다른 클래스인가?다른 템플릿 인자로 인스턴스화되었기 때문에 다르다.템플릿을 사용하면 객체를 안 생성해도 타입에 어떤 값을
임의 타입의 객체를 보관할 수 있는 컨테이너(container)\-> 편지를 보관하는 각각의 편지함컨테이너에 보관된 원소에 접근할 수 있는 반복자(iterator)\-> 편지를 보고 원하는 편지함을 찾는 일반복자들을 가지고 일련의 작업을 수행하는 알고리즘(algorit
C++의 표준 연관 컨테이너들(associative container) 연관 컨테이너는 키-값 구조를 가짐 키의 존재 유무만 궁금 -> 셋, 멀티셋 키에 대응하는 값이 궁금 -> 맵, 멀티맵 셋 내부적으로 이진 검색 트리 구조로 구성되어 있음. 실제로 셋 내부적
알고리즘 라이브러리는 컨테이너에 반복자들을 가지고 이런 저런 작업을 쉽게 수행할 수 있도록 도와주는 라이브러리크게 아래 두 형태를 띄고 있음template <typeName Iter> void do_something(Iter begin, Iter end);temp
기존에는 아래와 같이 if else문으로 오류 처리를 진행함수가 쌓이고 딥하게 들어간 함수에서(함수1() -> 함수2() -> 함수3()인데 함수3에서) 예외 처리하는 경우, 함수가 복잡하게 쌓이고, 중간에 다른 요인으로 예외 처리를 하고 싶을 때 그걸 할 수 없다.t
위 코드에서, A c(A(2)); // ❓ 일반 생성자 호출 이 부분의cpp에서는 복사 생성을 굳이 수행하지 않고, 임시로 만들어진 A(2)를 그냥 2로 취급해 일반 생성자만 호출하게 된다.좌측값(lvalue): 주소값을 취할 수 있는 값(식의 왼오 모두 올 수 있음)
사용이 끝난 자원은 반드시 반환을 해서 다른 작업 때 사용할 수 있도록 해야 합니다. 메모리를 할당만 하고 해제를 하지 않는다면, 결국 메모리 부족으로 프로그램이 crash 될 수도 있음.C++은 가비지 콜렉터가 없음 -> 한번 획득한 자원은 직접 해제해주지 않는 이상
Callable: 호출할 수 있는 모든 것람다 함수, 함수 객체 등 역시 callable이라고 할 수 있음.callable들을 객체의 형태로 보관할 수 있는 std::function이라는 클래스를 제공함.이때 const 함수는 이 함수 안에서는 어떤 변수도 바꿀 수 없
C++ 쓰레드 작업 관리자를 실행하면, 막대한 양의 프로세스가 나오는 것을 볼 수 있음 > 프로세스: 운영체제에서 실행되는 프로그램의 최소 단위, CPU의 코어에서 실행됨. 1개의 프로그램을 가리킬 때 보통 1개의 프로세스를 의미함. 컨텍스트 스위칭 CPU는
서로 다른 쓰레드들이 동일한 자원을 사용할 때 발생하는 문제CPU: 컴퓨터의 모든 연산이 발생하는 두뇌CPU의 연산: CPU의 레지스터라는 곳에 데이터를 기록한 다음에 연산을 수행해야 함.모든 데이터들 = 메모리에 저장,연산할 때: 메모리 -> 레지스터로 값을 가져오고
CPU와 컴퓨터 메모리(RAM)은 물리적으로 떨어져 있음.따라서 CPU에서 메모리를 읽는데 걸리는 시간: 약 42사이클(add 한번 하는데 걸리는 시간: 1사이클)CPU 칩 안에 있는 조그마한 메모리.램과는 달리 CPU에서 연산을 수행하는 부분이랑 거의 붙어 있어, 읽
하드 디스크에서 파일을 읽는다고 생각해 보자.SSD가 아니라 하드 디스크를 사용하면 임의의 위치에 쓰여져 있는 파일을 읽는데 시간이 오래 걸림. -> 램에서 데이터를 읽어내는 데 50나노초가 걸리는데, 그에 비해 약 8만배 느림.위 코드가 순차적으로 실행된다고 하자.1