[모던C++입문] 2.7 연산자 오버로딩 디자인
- 📕 Book/모던C++입문
- 2021. 7. 8.
연산자 오버로딩 디자인
일관성있게 디자인하자
- 도메인 특정 임베디드 언어(Domain-Specific Embedded Language) DSEL
- 특정 영역의 해결이나 표현을 위해 그 영역에 맞는 특화된 도구를 사용하자는 의미인 듯
우선순위를 존중하자
- 오버로드한 연산자의 의미와 의도한 우선순위가 C++의 우선순위와 일치하도록 하자
A = B ^ 2 + C; // B제곱에 C를 더하고 싶었겠지만
A = B ^ (2 + C); //컴파일러에서는 이렇게 이해한다
멤버함수 또는 자유 함수
std::cout << "cc + 4.2 is " << cc + 4.2 << std::endl;
//Complex에 double을 더하고자 한다면
//다음의 오버로드 연산자를 추가한다
class complex
{
//...
complex operator+(double r2) const
{
return complex(r + r2, i);
}
//...
}
//하지만 다음 코드는 컴파일 되지 않는다.
cout << "4.2 + cc is " << 4.2 + cc << endl;
//4.2+cc = 4.2.operator+(cc)로 받아들이기 때문
//허나 다음과 같은 자유함수를 작성하면 가능하다
inline complex operator+(double d, const complex& c2)
{
return complex(d + real(c2), imag(c2));
}
반응형