본문 바로가기
반응형

프로그래밍 언어/C++59

[C++] 클래스 파일 분할 클래스 파일 분할일반 함수와 같이 클래스도멤버 함수를 선언과 구현으로 분리하는 것이 일반적이다. 템플릿과 같이반드시 헤더 파일에 멤버 함수 구현부도 같이 있어야 하는 경우도 있다.📌 헤더파일(.h) 만들어서 include 하기 [C/C++] [전처리기] 헤더파일(.h) 만들어서 include 하기헤더파일(.h) 만들어서 include 하기 헤더파일(.h)에는 함수 원형이나 클래스만 선언한다.내부 구현은 별도의 파일에서 구현한다. [Calc.h]int add(int A, int B);  [Calc.cpp]#include "Calc.h"int add(int a, int b)zoosso.tistory.com 하나의 파일에서 구현 [main.cpp]#include #include class Blog{ std:.. 2025. 1. 30.
[C++] constexpr function constexpr function란함수명 앞에 constexpr 키워드를 사용할 수 있다.이는 함수 인자값을 컴파일 시간에 결정할 수 있으면 컴파일 시간에 함수 실행!결정할 수 없다면 (일반 함수처럼) 실행 시간에 함수 실행하게 된다.  📌 [C++] constexpr 키워드 [C++] constexpr 키워드constexpr• 컴파일 시간에 결정되는 상수 값• C++11 에서 도입된 문법• 템플릿 인자로 사용 가능• 상수식 계산, 배열 크기 정의 등 컴파일 시간에 최적화되는 코드 작성에 유용  const 키워드 비zoosso.tistory.com  [예제] constexpr function#include constexpr int square(int x, int y){ return x * y;}int .. 2025. 1. 29.
[C++] member initializer list member initializer list 필요성• 멤버 데이터로 상수나 참조가 있는 경우• 디폴트 생성자가 없는 타입이 멤버로 있는 경우  [예제] member initializer list 사용하지 않은 경우상수와 참조 변수는 반드시 초기화 되어야 한다.class Harbang{ const int c; int& r;public: Harbang(int c, int& r) { this->c = c; // error this->r = r; // error }};int main(){ int n = 5; Harbang h(5, n);} 생성자 블록 안에 값을 대입해주었지만초기화가 아니기 때문에 Build Error 발생멤버 초기화 리스트로 문제를 해결할 수 있다.  [예제] member initialize.. 2025. 1. 29.
[C++] lower_bound, upper_bound 사용해보기 lower_bound, upper_bound▶ lower_bound(start, end, val) =  [start, end) 범위에서 val 이상인 첫 번째 원소 위치 반환▶ upper_bound(start, end, val) =  [start, end) 범위에서 val 을 초과하는 첫번째 원소 위치 반환Harbang lower_bound(Harbang first, Harbang last, const T& value);Harbang lower_bound(Harbang first, Harbang last, const T& value, Compare comp);Harbang upper_bound(Harbang first, Harbang last, const T& value);Harbang upper_bou.. 2025. 1. 27.
[C++] rvalue reference rvalue referencervalue 등호(=) 오른쪽에만 올 수 있는 것lvalue 등호(=) 오른쪽/왼쪽 모두 올 수 있는 것  [예제] lvalue와 rvalueint main(){ int v = 0; v = 100; // ok (v = lavlue) 20 = v; // error (20 = rvalue)}[예제] lvalue reference• lvalue만 가리킬 수 있다.• rvalue에 사용하면 errorint main(){ int v = 0; int& r1 = v; // ok int& r2 = 100; // error}  [예제] const lvalue refenece• lvalue와 rvalue 모두 가리킬 수 있다.int main(){ int v = 0; //.. 2025. 1. 27.
[C++] constexpr 키워드 constexpr• 컴파일 시간에 결정되는 상수 값• C++11 에서 도입된 문법• 템플릿 인자로 사용 가능• 상수식 계산, 배열 크기 정의 등 컴파일 시간에 최적화되는 코드 작성에 유용  const 키워드 비교값 초기화 이후 변경할 수 없다는 것에서는 동일하다.#include void main(){ const int x = 5; x = 3; // error constexpr int y = 6; y = 2; // error}  Q) 그렇다면 어떤 차이가 있을까?상수값은 컴파일, 실행 시점 등 정해지는 시기가 다를 수 있다.#include void main(){ const int x = 5; int arr1[x]; // ok int temp = 3; const .. 2025. 1. 26.
[C++] static_cast 사용 방법 및 필요성 static_cast 필요성C 언어에서도 type casing 가능하지만논리적으로 위험한 캐스팅을 대부분 허용해서개발자 의도 인지 실수 인지 구분하기 어렵다.  [예제 코드]void* -> 다른 타입으로 캐스팅하는 것은위험하기 보다 필요한 캐스팅에 해당 하다.#include int main(){ // C Style int* p = (int*)malloc(sizeof(int) * 100); free(p); }  하지만int* -> 다른 타입(double*) 캐스팅 하는 것은4 Byte 할당한 곳에 8Byte 담는 것이기 때문에의도치 않은 결과를 야기할 수 있다.int main(){ int N = 100; double* p = (double*)&N; *p = 3.14;}static_cast논.. 2025. 1. 26.
[C++] 람다 표현식 lambda expression 람다 표현식 lambda expression• C++11 도입 • 익명의 함수(객체) 생성 • 함수 주소가 필요한 위치에 함수 구현 자체 표기 • auto 변수에 함수처럼 사용 • 특정 상황에서 일반 함수보다 빠르다. • 지역 변수 캡처 (capture local variable)[예제] 람다 표현식 적용 내림 차순 정렬할 때 sort 함수에 cmp 함수를 인자로 주었다.#include // 내림 차순bool cmp(int a, int b) { return a > b; } int main(){ int x[5] = { 1, 3, 5, 2, 4 }; std::sort(x, x + 5, cmp); for (auto v : x) { printf("%d ", v); // 5, 4, 3, 2, 1 }}  📌 .. 2025. 1. 25.
[C++] const_cast 필요성 및 활용 const_cast 필요성C언어 캐스팅으로 const 주소를 받아서값을 다르게 해볼 수 있다.#include int main(){ const int c = 100; int* p = (int*)&c; *p = 5; std::cout   엄격한 제한을 두지 않는 C Style Casting 이기 때문에개발자가 의도한 것인지 분명하지 않다.const_cast 활용C++에서는 const_cast 활용하여상수성을 제거할 수 있다.(static_cast와  reinterpret_cast 에서는 error 발생)int main(){ const int c = 100; int* p = const_cast(&c);}  C++에서는 casting 마다 역할이 있기 때문에필요하다면 각 역할에 맞게 중첩 캐스팅 해볼.. 2025. 1. 22.
[C++] reinterpret_cast 필요성 및 사용 방법 reinterpret_castreinterpret_casttype_id>(expression);→ reinterpret_cast바꿀 타입>(대상); • 메모리 재해석 • 서로 다른 타입 주소 캐스팅 • 정수 ↔ 주소 사이 캐스팅 C++에서는 주로 static_cast 활용하는데 다른 타입으로 변환하며 error 발생한다.#include int main(){ int harbang = 100; char* p = static_cast(&harbang); // error char& r = static_cast(harbang); // error}  아래와 같이 다른 타입으로 캐스팅 시 활용된다.#include int main(){ int harbang = 100; // int -> char ch.. 2025. 1. 21.
반응형