Programming Language/C++(73)
-
Part2::Ch 02. 연산자 오버로딩- 10. 사용자 정의 리터럴
1. 사용자 정의 리터럴사용자 정의 리터럴 (User-defined literal)은 C++11부터 도입된 기능으로 리터럴 값에 접미사를 붙여 그 값을 특정 타입이나 형식으로 자동 변환하는 문법이다. 2. 사용자 정의 리터럴의 사용법사용자 정의 리터럴을 정의 할때에는 무조건 _언더바를 붙인 형태로 정의되게 되어 있다.만약에 _언더바가 붙지 않은 리터럴의 경우는 표준 라이브러리에서 제공하는 리터럴로 인식하면 된다. 표준 라이브러리에서 제공하는 리터럴을 한번 보자면 chronochrono는 chrono라는 라이브러리에서 제공되는 리터럴이다. 그리고 chrono 리터럴을 사용하려면 std를 using namespace로 등록하거나 std::chrono_literals을 using namespace로 등록해야..
2025.05.03 -
Part2::Ch 02. 연산자 오버로딩- 09. 호출 연산자 오버로딩, 함수 객체
1. 호출 연산자호출 연산자(call operator)란 C++에서 () 괄호를 사용하는 연산자를 말한다.이를 오버로딩하면 함수처럼 객체(인자) 형식으로 객체를 함수처럼 호출할 수 있게 만들 수 있게 된다. 2. 호출연산자의 정의호출 연산자는반환타입 operator(){매개변수} const{ // 구현코드}와 같이 구현된다. 실제로 만드는 방법을 한번 보면 이렇게 호출되었을때 두 수를 비교해서 큰 숫자를 반환하는 함수 오퍼레이터를 오버로딩 해본다면이렇게 구현할 수 있다.이렇게 cout을 조금 변경해서 출력해보면이렇게 잘 출력하는 것을 볼 수 있다. 이걸 왜 쓰는 거지? 싶을 수 있는데 이건 일반적인 함수와는 다르게 상태를 보관할 수 있다는 점이 장점이다. 일반적인 함수의 경우 일회성으로 끝나게 되지..
2025.05.03 -
Part2::Ch 02. 연산자 오버로딩- 08. 변환 연산자 오버로딩, 변환 생성자, explicit
1. 변환 생성자먼저 변환이란 키워드는 다른 타입으로 변경해준다는 의미이다.예를 들어 int main(){ std::string s = "test"; // "test"라는 c-style 문자열이 c++스타일 String으로 변환되어 초기화 if(s){ // string 타입이 bool타입으로 변환되어 true/false를 반환 }}이런 과정들에 대한것이다. 그래서 한번 String 클래스를 만들어서 확인해보면이렇게 생성했을때 보면 문제 없이 String에 c스타일 문자열이 저장되는 것을 볼 수 있다.근데 이건 사실 저렇게 값을 넣어주는 시점에 이 생성자를 변환 생성자로 인식해서 이렇게 변환된다. 이렇게 암묵적 변환이 일어나는 과정은 사실1. "asdf"는 const char* 타입..
2025.05.03 -
Part2::Ch 02. 연산자 오버로딩- 07. 대입 연산자 오버로딩, 복사 생성자
먼저 복사 생성자에 대해서 알아보도록 하자.class Person {private: string name;public: Person() = default; Person(const char* c) :name(c) { } // 복사 생성자 Person(const Person& other) { name = other.name; }};이런 클래스가 존재한다고 할때int main() { Person p1("Alice"); Person p2 = p1; Person p1("Alice"); Person p2; p2 = p1;}여기에서 Person p2 = p1;와Person p2;p2 = p1;는 다르다. 위의 Pe..
2025.05.03 -
Part2::Ch 02. 연산자 오버로딩- 06. 첨자 연산자 오버로딩
1. 첨자연산자란첨자 연산자(subscript operator) operator[] 는 객체를 배열처럼 인덱스로 접근할 수 있게 해주는 연산자이다.클래스에서 첨자연산자를 오버로딩하면 클래스에서 obj[i] 같은 구문을 사용할 수 있도록 만들 수 있게 된다. 2. 첨자연산자의 오버로딩: Vector 클래스를 사용한이전에 사용했던 Vector 클래스를 한번 더 만들어서 사용해보도록 하자.우리가 해보고 싶은건 이렇게 했을때 순서대로 x값, y 값 이 출력 될 수 있도록 만들어 보도록 하자. 먼저 멤버 변수를 반환할 것이기에 반환값은 int 타입이 될 것이다.그리고 operator의 첨자연산의 경우는 []로 operator[]의 매개변수로는 index인 int 값이 들어가도록 만들어주면 된다.그리고 만약 ind..
2025.05.02 -
Part2::Ch 02. 연산자 오버로딩- 05. 비트 연산자 오버로딩
우선 비트 연산자의 종류로는 ~(NOT)연산자, &(AND)연산자, |(OR)연산자, ^(XOR)연산자, >(Right Shift)연산자가 있다.각각의 연산자에 대한 오버로딩에 대해서 한번 알아보도록 하자. 1. > 연산자는 각각 std 에서 cout, cin과 같은 입출력 연산자로 사용했었는데 이 입출력 연산자로써 오버로딩을 한번 해보도록 하자. 먼저 우리가 이전에 만들었던 Vector 클래스를 cout으로 넘겨주는 연산을 한번 확인해보자.먼저 Vector 클래스를 만들어주고우리가 하고 싶은건 이렇게 출력할 수 있도록 구현해보고자 하는것이다.그러면 사실 cout이 좌항으로 cout.operator(v)가 되어야하는데 사실 cout은 표준 입출력이기 때문에 우리가 구현을 다시할 수 가 없기에 기존에 전역..
2025.05.02