이 글은 개인의 학습을 목적으로 정리한 글입니다. 이점 참고하고 읽어주세요 ;)
int a = 10;
cout << -a << endl;
bool k = true;
cout << !k << endl;
+, -,!처럼 하나의 변수 앞에 붙어 특정 연산을 하는 연산자를 단항 연산자라고 합니다. 이런 단항 연산자들 역시 기존 자료형에서는 문제없이 작동되지만 사용자 정의 자료형인 클래스에서는 따로 정의를 해줘야 합니다.
class Cents
{
private:
int m_cents;
public:
Cents(int cents = 0) { m_cents = cents; }
Cents operator - () const
{
return Cents(-m_cents);
}
bool operator! () const
{
return (m_cents == 0) ? true : false;
}
friend std::ostream& operator << (std::ostream& out, const Cents& c)
{
out << c.m_cents;
return out;
}
};
예제로 사용된 Cents 클래스의 전체 정의 부분입니다.
우선 단항 연산자 중 - 연산자부터 보겠습니다.
Cents operator - () const
{
return Cents(-m_cents);
}
- 연산자 정의는 입출력 연산자나 산술 연산자에 비해 간단합니다. Cents를 출력 자료형으로 입력하고, 연산자 이름에 operator -를 그리고 매개변수는 입력하지 않습니다.
return값에는 코드 블록과 같이 Cents(-m_cents)를 입력하면 됩니다.
int main()
{
Cents cents1(6);
cout << cents1 << endl;
cout << -cents1 << endl;
cout << -Cents(-10) << endl;
return 0;
}
그리고 main 함수에서 코드 블록과 같이 Cents 자료형 cents1을 정의하고, cents1에 그대로 - 연산자를 붙여 출력하면
사진과 같이 아무 이상 없이 출력되는 걸 확인할 수 있습니다.
주의하실점은 Cents 클래스의 멤버들을 정의할 때 출력 연산자의 매개변수에서 Cents& c 앞에 선언하는 const를 없애면 일반 출력은 가능하지만, - 연산자를 붙인 cents1은 출력할 수 없다고 나옵니다. 혹시 그 이유를 아는 분은 댓글로 남겨주세요ㅠ
bool operator! () const
{
return (m_cents == 0) ? true : false;
}
이번에는 !(not) 연산자입니다. ! 연산자는 - 연산자와 다르게 출력 값이 true 아니면 false인 boolean 자료형으로 출력될 수밖에 없어요. 때문에 출력 연산자는 bool로 설정해줍니다. 그리고 연산자 이름에는 operator! 를 입력해주고 매개변수는 없습니다.
return 값은 클래스 내에서 ! 연산자를 어떤 용도로 사용하느냐에 따라 그 정의가 달라집니다. 이번 예제에서는 단순히 Cents의 멤버인 m_cents가 0이면 true를, 0이 아니면 false를 출력하도록 정의했습니다.
int main()
{
Cents cents1(6);
Cents cents2(0);
cout << !cents1 << " " << !cents2 << endl;
return 0;
}
이렇게 정의한 Cents 클래스를 main함수에서 다음과 같이 실행시키면
cents1은 0이 아니기 때문에 0이 출력되고, cents2는 0이기 때문에 1이 출력되는 걸 확인할 수 있습니다!
'Information Technology > C++' 카테고리의 다른 글
[C++] 비교 연산자 오버로딩 (0) | 2019.11.17 |
---|---|
[C++] 클래스와 const (0) | 2019.11.16 |
[C++] 입출력 연산자 오버로딩 (0) | 2019.11.15 |
[C++] 산술 연산자 오버로딩 (0) | 2019.11.15 |
[C++] std::move(2) (0) | 2019.11.15 |