연산자
함수처럼 작동하는 부호
int result = num1 + num2;
if (num1 < num2) {}
if (IsNumber() || IsAlph()) {}
num1++;
num1 += 1;
연산자의 종류
단항 연산자
!
&
~
*
+
++
-
--
변환 연산자
등
if (!IsNumber()) {}
Vector& vRef = vector1; // 레퍼런스는 단항 연산자가 아니다.
int hexNum = 0xFF00;
int inversion = ~hexNum;
int *number1 = &number; // 주소를 불러오는 건 단항 연산자이다.
*number1 = 10;
int number2 = +10;
int number3 = -10;
++num1; num1--;
--num1; num1--;
int num4 = (int)gpa;
이항 연산자
기타 연산자
연산자 오버로딩
// Vector.h
class Vector
{
public:
Vector operator+(const Vector& rhs) const; // right hand side
private:
int mX;
int mY;
};
// main.h
Vector v1(10, 20);
Vector v2(3, 17);
Vector sum = v1 + v2;
// Vector.cpp
Vector Vector::operator+(const Vector& rhs) const
{
Vector sum;
sum.mX = mX + rhs.mX;
sum.mY = mY + rhs.mY;
return sum;
}
- 부호가 같지만 여러가지 연산이 가능하다.
int
형 변수끼리 더하기:int1 = int1 + int2;
float
형 변수끼리 더하기:float1 = float1 + float2;
string
형 변수끼리 더하기:name = firstName + lastName;
- 연산자를 오버로딩 하는 방법은 2가지가 있다.
- 멤버 함수
- 멤버 아닌 함수
멤버 함수를 이용한 연산자 오버로딩
연산자도 메서드
Vector sum = v1 + v2;
Vector sum = v1.operator+(v2); // 위와 동일하다.
std::cout << number;
std::cout.operator<<(number); // 위와 동일하다.
- 특정 연산자들은 멤버 함수를 이용해서만 오버로딩이 가능하다.
=
,()
,[]
,->
오버로딩 예제
→ 굳이 값 복사할 필요 없으므로 레퍼런스로 받아온다.
멤버 연산자를 작성하는 방법
<return-type> <class-name>::operator<operator-symbol>(<argument-list>)
멤버 아닌 함수를 이용한 연산자 오버로딩.
Vector vector(10, 20);
std::cout << vector1; // -> 10, 20 이렇게 표출되도록 하고 싶다.
→ std::cout.operator<<(vector1);
- Standard Library에 있는 함수를 오버로딩 할 수 없다. (좌항에 대한 접근 권한이 없을 때)
- 따라서 전역 함수를 만들어야 한다.
'Language > C++' 카테고리의 다른 글
[C++] 17.Unmanaged Programming: 연산자 오버로딩과 const (0) | 2024.01.30 |
---|---|
[C++] 16.Unmanaged Programming: Friend 키워드 (0) | 2024.01.29 |
[C++] 14.Unmanaged Programming: 함수 오버로딩 (0) | 2024.01.25 |
[C++] 13.Unmanaged Programming: 복사 생성자 (0) | 2024.01.25 |
[C++] 12.Unmanaged Programming: 구조체 VS 클래스 (0) | 2024.01.25 |