전체 글 254

[C++] 50. 인덱스 연산자 중복 정의

[C++] 인덱스 연산자 중복 정의 이번에는 인덱스 연산자 중복 정의를 살펴보기로 해요. 배열과 같은 컬렉션은 인덱스 연산을 통해 원소에 접근할 수 있게 사용자 편의를 제공하곤 합니다. 배열의 인덱스 연산의 결과는 좌항에 올 수도 있기 때문에 연산 결과는 원소 자체를 의미합니다. 만약 정수 형식의 데이터를 원소로 하는 배열 클래스를 정의하고 인덱스 연산자를 중복 정의한다면 원소 자체를 반환하게 구현해야 하므로 다음과 같이 정의합니다. int &operator[](int index);//인덱스 연산자 중복 정의 다음은 인덱스 연산을 중복 정의하여 정수 형식의 데이터를 보관하는 DCArr 클래스를 정의하고 이를 사용한 예제 코드입니다. //DCArray #pragma once class DCArray { i..

[ C++] 49. 대입 연산자 중복 정의

[ C++] 대입 연산자 중복 정의 이번에는 대입 연산자 중복 정의를 하는 방법을 살펴보기로 할게요. 대입 연산자는 개발자가 정의하지 않으면 디폴트 대입 연산자가 동작합니다. 디폴트 대입 연산자는 디폴트 복사 생성자처럼 단순히 메모리 내용을 복사하는 얕은 복사를 진행합니다. 복사 생성자처럼 클래스 내부에 동적으로 생성한 다른 개체를 갖고 있을 때 깊은 복사를 하는 대입 연산자를 중복 정의할 필요가 있습니다. 깊은 복사와 얕은 복사는 복사 생성자 부분을 다시 살펴보기기 바랍니다. [C++] 16. 생성자, 소멸자 여기에서는 복사 생성자에서 예를 들었던 동적 배열을 예로 들게요. 동적 배열은 생성할 때 보관할 원소의 최대 개수를 입력 인자로 받아 배열을 동적으로 생성하게 할 거예요. DCArray::DCAr..

[C++] 48. 증감 연산자 중복 정의

[C++] 증감 연산자 중복 정의 이번에는 증감 연산자 중복 정의를 하는 방법을 살펴보기로 할게요. 아시는 것처럼 증감 연산자는 단항 연산자로 전위에 올 때와 후위에 올 때 연산 결과가 다릅니다. 전위에 올 때는 값을 증감한 자기 자신이 연산 결과이고 후위에 올 때는 변경하기 전의 자신의 값입니다. 따라서 전위 증감 연산자의 반환 형식은 자기 자신을 전달하기 위해 클래스 형식 &를 사용합니다. 그리고 후위 증감 연산자의 반환 형식은 증감하기 전 자신의 값을 복사한 개체를 상수 값으로 반환하기 위해 const 클래스 형식을 사용합니다. C++에서 증감 연산자 중복 정의할 때 전위인지 후위인지 구분하기 위해 후위 증감 연산자 중복 정의할 때는 스텁 매개 변수를 추가로 받게 정의합니다. 다음은 Score 클래..

[C++] 47. 클래스에 연산자 중복 정의

[C++] 클래스에 연산자 중복 정의 이번에는 클래스 내부에 멤버 메서드로 연산자를 중복 정의하는 방법을 알아봅시다. 클래스 내부에 멤버 메서드로 연산자를 중복 정의할 때도 메서드의 이름은 operator 키워드에 연산 기호로 나타냅니다. 대신 피연산자 중에서 좌항에 오는 자기 자신은 입력 매개 변수 리스트에 열거하지 않습니다. 주의할 점은 사용하는 곳에서 피연산자의 좌항에 클래스 형식이 올 때만 동작한다는 것입니다. 교환 법칙이 성립할 때는 우항에 클래스 형식이 올 때 수행할 수 있게 전역 연산자 중복 정의도 같이 하시기 바랍니다. 다음은 전역 연산자 중복 정의에서 다루었던 학생 클래스에 == 연산자 중복 정의했던 코드를 클래스 내부에 메서드로 연산자 중복 정의하는 코드입니다. //Student.h #..

[C++] 46. 전역 연산자 중복 정의

[C++] 전역 연산자 중복 정의 개발자는 전역이나 클래스 내에서 연산자 중복 정의할 수 있습니다. 먼저 전역에서 연산자 중복 정의 방법을 알아봅시다. 연산자 중복 정의할 때는 메서드 이름 대신 operator 키워드 뒤에 정의할 연산 기호를 명시합니다. 그리고 피연산자는 순서대로 입력 매개 변수 리스트에 열거하고 연산 결과는 리턴 형식으로 표현합니다. [리턴 형식] operator [연산기호] (입력 매개 변수 리스트) { [기능 구현] } 간단하게 학생 클래스를 정의한 후에 == 연산자를 전역에 중복 정의해 볼게요. 다음과 같은 학생 클래스가 있다고 가정해요. //Student.h #pragma once #include #include using namespace std; class Student {..