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