본문 바로가기
반응형

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

[C++] default 생성자 요청 default 생성자 요청클래스에서 아래와 같이 개발자가 기본 생성자를 만들 수 있다.class Point{ int x, y;public: Point() {}; Point(int a, int b) : x{ a }, y{ b } {}};int main(){ Point p;}  「= default」 형태로컴파일러에게 기본 생성자를 만들어 달라고 요청할 수 있다.이는 최적화를 보다 잘 지원 받기 위함class Point{ int x, y;public: Point() = default; Point(int a, int b) : x{ a }, y{ b } {}};int main(){ Point p;}  📌 [C++] 생성자 함수  [C++] 생성자 함수생성자 함수 (constructor)• 클래스 이름과 동일한 .. 2025. 2. 5.
[C++] 복사 생성자 (Copy Constructor)란? 복사 생성자 (Copy Constructor)란?객체가 자신과 동일한 타입의 객체로 초기화 될 때 호출되는 생성자class A{ int no; char ch;public: A(const A & ra); // 복사생성자함수};  [예시] 복사 생성자p2는 Point(int) 필요하지만Point(Point) 형태로 복사 생성자로 build error 발생 Xclass Point{ int x; int y;public: Point() : x{ 0 }, y{ 0 } {} Point(int a, int b) : x{ a }, y{ b } {}};int main(){ Point p1(1, 2); // ok // Point p2(1); // error Point p3(p1); // ok }  .. 2025. 2. 4.
[C++] default member initializer 클래스 멤버 초기화크게 대입 방식, 초기화 방식 2가지가 존재한다. 대입 방식① string 타입의 디폴트 생성자 호출② 대입 연산자 호출 초기화 방식① 해당 인자에 맞는 생성자 호출하여 초기화#include int g = 0;class Harbang{ std::string name; int age;public: Harbang(const std::string& s, int a) { // 대입 방식 name = s; age = a; }};class Forest{ std::string name; int age;public: Forest(const std::string& s, int a) : name{s}, age{a} {} // 초기화}; Q) 어떤 방식이 좋을까?간단한 원형 타입이라면 초기화 방식이.. 2025. 2. 2.
[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.
반응형