C++ 14

생성자와 멤버 초기화 리스트

생성자객체가 생성된 직후에 자동으로 호출되는 함수.생성자에서 속성을 초기화하는 등 객체를 사용할 준비를 할 수 있습니다.#include using namespace std;template // 템플릿 선언 추가class SimpleVector {public: SimpleVector() { // 생성자 currentSize = 0; currentCapacity = 10; data = new T[currentCapacity]; } ~SimpleVector() { // 소멸자 추가 (동적 메모리 해제) delete[] data; }private: int currentSize; // 현재 요소 개수 int currentC..

C++ 2025.01.16

예외 처리 생략과 실패 대응

예외 처리 생략 - noexcept함수의 예외처리는 이전글에서 작성했듯이 try, throw, catch로 꼼꼼히 작성을 해주어야 합니다.그런데 이런 것을 항상 작성하는 것은 힘들뿐더러 값이나 실행 흐름을 충분히 예측할 수 있을 때는if 문으로 처리하는 것이 훨씬 편하고 성능면에서도 이득이라고 합니다. int func() noexcept'함수가 예외를 던지지 않는다'는 뜻으로 noexcept를 작성해줍니다.실제로 noexcept를 작성한 함수 안에 throw를 작성하여 예외를 던지면 디버그 에러가 납니다. 다시말해서 개발자가 실수로 noexcept가 붙은 함수 안에 예외 처리를 작성하는 것을 막을 수 있습니다. bool No_throw = noexcept(func()); // true 혹은 false로 ..

C++ 2025.01.09

예외 처리 - try, catch, throw 와 어설션 비교

try, catch, throw 문 try예외가 발생할 수 있는 코드 블록을 중괄호로 감싸줍니다.catch예외를 catch 블록으로 넘겨줍니다.throwthrow가 넘긴 예외를 받아서 처리합니다.  코드 예시try { // 예외를 넘길 수 있는 코드 throw 예외_값} catch (예외_타입 예외_이름) { // 예외를 처리하는 코드}throw가 작동하면 throw 밑의 코드는 작동하지 않고 바로 catch로 이동.예외 값과 같은 타입의 catch가 작동합니다.코드 작성시 throw의 예외 값에 해당하는 catch 예외 형식을 만들지 않으면 오류가 발생.하지만 모든 예외의 짝을 맞추기 쉽지 않기에 catch(…)문을 사용하면 명시하지 않은 나머지 모든 예외를 받아서 처리할 수 있습니다.try { // ..

C++ 2025.01.08

this 포인터 사용법

1. 멤버 변수와 지역 변수를 구별멤버 변수와 매개 변수의 이름은 다르게 만드는 것이 좋겠지만이미 작성한 코드와 파일이 많을 때는 그러한 것을 항상 지키는 것은 쉽지 않을 것이기 때문에this 포인터를 사용하여 구분하여 충돌을 피할 수 있습니다.void testclass::member_func(int safe) { this->variable = variable;}this -> variable : 멤버 변수variable : 매개변수 2. 멤버 함수 체이닝 구현함수 체이닝 : 여러 함수를 연이어 호출하는 방식#include class Testclass {private: int num;public: Testclass(int n) : num(n) {} Testclass& add(int n); ..

C++ 2025.01.07

디자인 패턴 - 싱글톤 패턴

디자인 패턴개발 시 반복적으로 등장하는 문제를 해결하기 위한 일반화된 해결책.  싱글톤 패턴객체의 인스턴스가 오직 1개만 생성하는 패턴. 예를 들어 플레이어가 제어하는 캐릭터처럼 1개만 존재해야하는 인스턴스를다른 사람이 코드를 작성하다가 실수로 또 캐릭터를 생성하는 코드를 작성하는 오류를 막을 수 있는 것이싱글톤 패턴입니다.  싱글톤 패턴 구조1. 정적 멤버 변수클래스트의 유일한 인스턴스를 저장합니다. 2. private 생성자생성자를 private로 선언하여 외부에서 인스턴스를 생성하지 못하게 합니다. 3. 정적 메서드정적 메서드를 통해 클래스의 유일한 인스턴스에 접근할 수 있도록 합니다.  class Singleton {private: static Singleton* instance; Si..

C++ 2025.01.06

기존의 for 문 & 범위 기반 for 문 비교

기존의 for 문과 범위 기반 for 문의 차이를코드로 작성해서 눈으로 보며 비교하고 싶어서 이렇게 글을 작성합니다. 기존의 for 문 (배열)배열의 값을 for문으로 반복하며 num이 값을 얻어서 출력하는 코드입니다. #include using namespace std;int main() { int arr[] = { 10, 20, 30, 40, 50 }; int size = 5; for (int i = 0; i  범위 기반 for 문 (배열)#include using namespace std;int main() { int arr[] = { 10, 20, 30, 40, 50 }; for (int num : arr) { cout    기존의 for 문 (vector)..

C++ 2025.01.03

멤버 함수의 const 사용

C++을 공부하면 마주하게 되는 멤버 함수에 사용되는 const의 용도와 의미를 알아보고추가적으로 매개변수에 사용되는 const와 &의 사용 이유를 정리해 보았습니다.  멤버 함수의 const C++을 공부하다보면 멤버 함수 뒤에 const가 있는 경우가 있습니다.void function() const {} 멤버 함수 뒤의 const의 용도1. 객체의 변수 변경을 막습니다.2. const 객체는 const 멤버 함수만 호출 가능합니다. 예시 코드와 함께 좀 더 자세히 알아보겠습니다.#include using namespace std;class Example {private: int value;public: Example(int v) : value(v) {} int getValue() co..

C++ 2025.01.02

Visual Studio의 메모리 할당

C++를 공부하며 타입에 따른 메모리 할당을 알아보던 중 궁금한 것이 생겨 이렇게 글로 정리해보려고 합니다. 의문분명 int가 메모리에서 차지하는 크기는 4바이트로 #include using namespace std;int main() { int a = 10; int b = 20; int c = 30; cout  해당 코드를 실행하면 주소 또한 4바이트의 차이를 낼 줄 알았습니다.실제 온라인 컴파일러의 결과는 예상대로였지만Visual Studio 2022의 결과는 예상과는 다르게 32바이트 차이가 났습니다.(20차이로 보이지만 주소는 16진수이므로 한자리가 0~F까지) 그래서 직접 메모리를 찾아본 결과 4바이트의 int와 28바이트 빈 공간이 있었습니다.   여기서 2가지 의문을 정리해보겠습니다.1. 3..

C++ 2024.12.31

정적 변수 & 전역 변수 차이

정적 변수와 전역 변수의 차이를 정리해보았습니다. 특징정적 변수전역 변수선언 위치함수/클래스 내부함수/클래스 외부접근 범위선언된 범위 내부프로그램 전체공유 범위동일 함수/클래스 내에서만 값 공유모든 함수/클래스 내에서만 값 공유생명 주기 프로그램 종료 시까지 유지 프로그램 종료 시까지 유지 장점데이터 은닉성 보장, 부작용 최소화값 공유와 상태 관리를 쉽게 할 수 있음단점범위 내에서만 사용 가능다른 함수에서 수정 가능하여 디버깅이 어려울 수 있음

C++ 2024.12.30