Programming Language/C++(73)
-
Part2::Ch 02. 연산자 오버로딩- 04. 논리 연산자 오버로딩
C++에서 논리 연산자 오버로딩(Logical Operator Overloading)은 &&, ||, ! 등의 논리 연산자를 사용자 정의 타입에서 사용할 수 있도록 기능을 확장하는 것을 말한다.다만, 주의할 점이 많고 제한도 존재하기에 오버로딩을 하기에는 조심스러운 연산자라는 점을 이해하고 시작해보자. 이번에도 String 클래스를 하나 생성해서 한번 확인해보도록 하자. 1. !(NOT)연산자먼저 NOT연산자에 대해서 보자면 , 먼저 해당 타입에 대한 반환값은 bool타입이 될 것이다.먼저 우리가 만들 NOT 연산자 오버로딩에 대해서 구체적으로 말해보자면 파이썬이나 자바스크립트같은 곳에서 이렇게 문자열의 내부에 값이 존재할때는 !s가 false가 되고 이렇게 빈문자열이 오면 true가 되는 NOT 연산..
2025.05.02 -
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