개요
오랜만에 수업 정리 글입니다.
오랜만인만큼 상당히 예전 진도입니다. 이거 이용해서 수행평가까지 봤어요.
수행평가 만점임(중요)
아무튼 오늘 정리할 내용은 연산자 오버로딩 입니다.
연산자 중복이란 자랑스러운 한국어 냅두고 영어를 쓰는 이유는 있어보여서 입니다.
그게 뭔데
연산자 오버로딩은 함수처럼 연산자를 오버로딩 하는 것을 뜻합니다.
보통 연산자를 통해 연산할 수 없는 것 (클래스 등) 끼리 더하거나 코드의 편의성을 높이기 위해 사용합니다.
이러한 클래스가 있다고 해봅시다.
class MyClass
{
int a;
int b;
public:
MyClass(int x, int y) : a{x}, b{y} {};
}
근데 저는 이 클래스 두개를 더했을때 각자의 클래스의 a와 b변수를 더한 새 클래스가 나왔으면 좋겠습니다.
그럴때 사용하는게 바로 연산자 오버로딩!
연산자 오버로딩을 하는 방법은 다음과 같습니다.
반환형 operator연산자(const 반환형& ref)
반환형과 같은 경우엔
+, -, *, / 와 같은 연산자일땐 클래스 자신을
>, <, <=, >= 과 같은 비교 연산자일땐 bool 값을 반환하도록 하는게 일반적입니다.
int main()
{
MyClass c1(1,2);
MyClass c2(3,4);
c1 + c2;
}
이러한 연산을 한다고 쳤을때 연산자 함수가 실행되는 주체는 c1, 매개변수로 넘어오는 것은 c2입니다.
이제 다 배웠으니 한번 만들어봅시다.
class MyClass
{
public:
int a;
int b;
MyClass(int x, int y) : a{x}, b{y} {};
MyClass operator+ (const MyClass& c2)
{
MyClass c3(a+c2.a, b+c2.b);
return c3;
}
}
int main()
{
MyClass c1(1,2);
MyClass c2(3,4);
MyClass c3 = c1 + c2;
cout << c3.a << " " << c3.b << endl; // 출력결과 : 4 6
}
매개변수를 왜?
지금 만든 연산자 오버로딩을 보면 넘어가는 매개변수에 뭐가 주렁주렁 달려있습니다.
(const MyClass& c2)
그 이유는 속도와 안정성을 챙기기 위함입니다.
먼저 참조자를 사용하는 이유는 속도를 빠르게 하기 위함입니다.
매개변수로 일반 값을 넘겨주면 값을 복사하는데에 시간이 걸리는데 이것을 참조자로 넘겨주면 비용 면에서도 시간 면에서도 좋기떄문입니다.
그리고 앞에 붙는 const. 이게 무슨 뜻입니까?
변하지 않는 수, 상수 아닙니까?
제가 만약 변수 두개를 더하는 일이 생겼습니다.
근데 그 변수 두개를 더했더니 값은 제대로 나왔는데 두번째 변수의 값이 막 바뀌면 안되겠죠?
그것을 방지하기위해 붙입니다.
물론 참조자를 사용하지 않는다면 const는 붙이지 않아도 상관 없습니다.
마치는 말
사실 목차가 하나 더 있었습니다.
cout이나 cin에 쓰이는 쉬프트 연산자 (<< , >>) 오버로딩에 대해서죠.
근데 제가 이해를 못해서 안적었습니다.
'개발 > C++' 카테고리의 다른 글
게임 프로그래밍 | C++ | 헤더 (0) | 2024.05.23 |
---|---|
게임 프로그래밍 | C++ | 빌드 (1) | 2024.04.29 |
C++ | 동적 배열 (3) | 2024.04.17 |
게임 프로그래밍 | C++ | 메모리 구조 (0) | 2024.04.17 |
게임 프로그래밍 | C++ | 열거형 (1) | 2024.04.10 |