Programming Language(170)
-
Part2::Ch 02. 연산자 오버로딩- 03. 비교&관계 연산자 오버로딩
비교 관계 연산자 오버로딩은 C++에서 객체끼리 ==, , !=, = 같은 비교 연산을 직접 정의할 수 있도록 해주는 기능으로 객체 간의 정렬, 비교, 검색 등에 매우 중요하게 사용된다. 우리가 해보고자 하는건 std::string의 기능을 따라 만들어보고자 한다.std:string에서는 객체간의 비교연산이 가능했었다.이 기능을 한번 만들어보고자 한다. 우선 이 기능을 만들기 위해서는 C언어의 기능을 가져와서 사용하기 위해서 cstring과 보안이슈를 위한 pragma warning을 추가해주자.그리고 class String을 하나 생성해주고 멤버 변수로는 생성자를 통해 초기화 하는 크기에 맞게 문자열을 넣어주기 위해서 char형 포인터를 만들어주자.그리고 생성자를 추가해주는데 이 생성자에서는 const..
2025.05.02 -
Part2::Ch 02. 연산자 오버로딩- 01&02. 산술 연산자 오버로딩
산술 연산자 오버로딩은 C++의 핵심 기능 중 하나로, 사용자 정의 클래스에 대해 +, -, *, / 등의 연산자를 직접 정의해서 객체 간의 연산을 가능하게 만드는 기능이다 먼저 하나의 클래스를 만들어보자.class Vector {public: int x, y;};여기서 우리가 연산자 오버로딩을 통해서 수행하고 싶은 것은 int main() { Vector v{ 1, 2 }; Vector v1{ 3, 4 }; Vector v2 = v + v1;}이런 것들에 대한 것이다. 더보기기존의 클래스의 경우는 객체를 생성하려면 멤버 변수가 public이건 private이건 class Vector {public: int x, y;};int main() { Vector v{ 1, 2 }..
2025.05.02 -
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