Programming(168)
-
Part2::Ch 01. 클래스 - 09. 멤버 함수 포인터
클래스의 멤버 함수 포인터는 일반 함수 포인터와는 다르게 어떤 객체의 멤버 함수인지를 가리킨다는 특징이 있다. 이는 객체 지향에서 객체마다 다른 this 포인터를 갖기 때문에 함수 호출 시 특별한 문법이 필요하기 때문이다. 1. 멤버 함수 포인터의 정의멤버 함수 포인터의 기본적인 정의방법은 아래와 같다.반환형 (클래스명::*포인터이름)(매개변수 목록); 이를 사용한 예시로는 class MyClass {public: void show(int a) { std::cout void (MyClass::*funcPtr)(int) = &MyClass::show;와 같이 사용할 수 있다. 2. 멤버 함수 포인터의 사용멤버 함수 포인터를 사용해서 함수를 호출할때에는 단순히 funcPtr(5) 이런 식으..
2025.04.29 -
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