전체 글(155)
-
Part2::Ch 01. 클래스 - 08. 정적 멤버
C++에서 정적 멤버(static member)는 클래스의 모든 인스턴스가 공유하는 변수 또는 함수를 의미한다. 정적 멤버 변수클래스의 모든 객체가 공통으로 사용하는 하나의 변수로 하나의 클래스로 여러개의 객체를 만들 수 있는데 이 모든 객체가 동일하게 하나의 정적 멤버 변수의 메모리 위치를 바라보고 사용하게 된다.#pragma once#include class Car{private: static int carCount; // 정적 멤버 변수 선언public: Car() { carCount++; } // 객체가 생성될 때 마다 증가 void print() { std::cout carCount 여기서 주의해야할 점은 이렇게만 사용하면 main에서는 사용이 불가능하다.#inc..
2025.04.29 -
Part2::Ch 01. 클래스 - 07. const
C++에서 클래스에 등장하는 const는 여러 위치에 따라 의미가 달라지기에 5개의 주요 형태에 대해서 확인해보자. 1. 멤버 변수 선언 시의 constclass Car {private: const int id; // 수정 불가한 멤버 변수};이렇게 멤버 변수를 선언할때 const를 선언해줄 수 있는데 이렇게 선언하면 객체가 생성되고 나서부터 해당 멤버 변수는 변경이 불가능한 상태로 생성이 된다.이를 초기화하는 방식법은 Car(int i) : id(i) {} // ✅ OKCar() { id = 5; } // ❌ 에러위와 같이 생성자 이니셜라이저 리스트에서만 가능하고 대입하는 식의 방법은 불가능하다.또한 그냥 멤버 함수 자체의 정의와 동시에 초기화도 가능하다.class Car {privat..
2025.04.29 -
Part2::Ch 01. 클래스 - 06. this 포인터
1. this 포인터this 포인터는 C++에서 클래스의 멤버 함수 내부에서 자신을 가리키는 포인터로 멤버 함수 안에서 this를 사용하면그 함수를 호출한 객체 자신의 주소를 반환한다.class Car {private: int speed;public: void setSpeed(int speed) { this->speed = speed; }};이렇게 사용이 되는데 여기서 this는 Car* 타입으로 해당 객체를 가르키는 포인터로 this -> speed는 멤버함수 speed를 의미하고 보통 speed = speed; 처럼 매개변수의 이름과 멤버함수의 이름이 같을때, 자기 자신의 주소를 리턴할 때, 자기자신(객체)를 반환하려고 할 때, 자기 자신과 다른 객체 비교할 때 this..
2025.04.29 -
Part2::Ch 01. 클래스 - 05. 선언과 정의의 분리 & 전방 선언
1. 선언과 정의의 분리 C++에서는 One Definition Rule(ODR, 단일 정의 규칙)이라고 해서 하나의 엔티티(함수, 변수, 클래스 등)는 프로그램 전체에서 단 하나의 정의만 가져야 한다라는 규칙이 존재하고 이는 C++의 컴파일 및 링크 과정에서 매우 중요한 요소가 된다. ODR의 핵심개념하나의 프로그램 전체에서 특정 이름(함수, 전역 변수, 클래스 등)은 오직 하나의 정의 만 존재해야 함여러 번 선언은 가능하나 정의는 단 한 번 만 가능하고 만약이를 위배해서 여러 번 정의가 존재하면 링커 에러(linker error)가 발생함 우선 정의는 선언을 포함한 개념으로 정의만 하더라도 함수, 전역 변수, 클래스등의 사용은 문제가 없다. 함수의 경우는 프로토 타입이란것으로 함수의 선언을 따로 분..
2025.04.29 -
Part2::Ch 01. 클래스 - 04. 파괴자(Destructor)
1. 파괴자란객체가 소멸될 때 자동으로 호출되는 특수한 함수로 객체가 메모리에서 삭제될 때, 그 전에 해야 할 정리(clean-up) 작업을 담당하는 함수다. 2. 파괴자의 기본 형태~클래스이름();클래스 명앞에 ~(틸트)를 붙여서 생성하며 반환형도 없고 매개변수도 없으며 딱 하나만 정의할 수 있다. 3. 파괴자가 호출되는 시점파괴자는 지역 변수로 생성된 객체가 스코프를 벗어날 때 delete로 객체를 지울때 프로그램 종료 시점에 자동으로 호출된다. 4. 파괴자 호출의 예시 파괴자가 꼭 필요한 경우는 멤버 변수를 동적할당해줄 경우엔 반드시 delete로 해제를 해야하기 때문에 class Car {private: int* speed;public: Car(int s) { speed =..
2025.04.29 -
Part2::Ch 01. 클래스 - 03. 생성자(Constructor)
1. 생성자란생성자는 객체가 생성될 때 자동으로 호출 되어 멤버 변수들을 초기화해주는 특수한 함수이다.생성자는 클래스와 이름이 같고 반환형이 없으며 객체가 만들어질때 자동으로 호출된다. 클래스는 이전에 봤던것과 같이 멤버 변수는 private로 제한하여 외부에서 멤버 변수에 접근할수 없도록 만드는 것이 보통이다.또한 만약 public으로 생성해서 만들어준다고 하더라도 class Car {public: int speed;}int main() { Car car; std::cout 이렇게 구현되어 있을때 speed는 초기 값이 들어가 있지 않기 때문에 호출하면 쓰레기 값이 출력되게 된다. 그래서 객체를 만들자마자 자동으로 초기값을 설정해주는 함수가 필요했기에 나온 것이 생성자이다. 2. 생성자..
2025.04.29