C++ 프로그래밍: 연산자 오버로딩
연산자 오버로딩의 첫 번째 사용을 살펴보면 터미널에 값을 인쇄하기 위해 오버로드된 연산자
std::cout
를 사용하여 <<
에서 이를 볼 수 있습니다. 다음과 같이 사용됩니다.int main() {
std::cout << "Hello, World!\n";
// ^^ <-- This is the overloaded operator
}
이것은 사소한 것입니다, 그렇죠? 우리 대부분은 별 생각 없이 이 연산자를 사용하지만 자신의 클래스에 대해 이 연산자를 오버로드하면 사용자 정의 클래스를 인쇄할 수 있다는 점
std::cout
이 충분히 중요합니다.실제 사례
class CustomVector {
float x;
float y;
public:
explicit CustomVector(float x, float y) : x(x), y(y) {}
bool operator==(const CustomVector &vec) const {
return this->x == vec.x && this->y == vec.y;
}
CustomVector operator+(const CustomVector &vec) const {
return CustomVector(this->x + vec.x, this->y + vec.y);
}
// ...
};
그래서 여기서 실제로 무슨 일이 일어나고 있는지 분석해 봅시다.
CustomVector
라는 클래스가 있고 여기에 x
및 y
값을 부여합니다. 이제 이것으로 무엇을 할까요? 우리는 항상 그들의 x 값을 지속적으로 비교하고 싶지 않기 때문에 대신 우리가 하는 일은 ==
연산자가 우리를 위해 이것을 할 수 있도록 연산자 오버로드에서 생성하는 것입니다.연산자 함수를 작성하는 것은
operator
뒤에 오버로드할 유효한 연산자가 오는 함수 이름의 차이점을 사용하여 일반 함수를 작성하는 것만큼 간단합니다. 실제로 C++에서는 new
및 delete
키워드도 오버로드할 수 있지만 일반적으로 권장되지는 않습니다.연산자 적용 및 std::cout 사용
+
연산자를 구현한 후 다음 행을 추가할 수 있습니다.friend std::ostream& operator<<(std::ostream& s, const CustomVector &vec);
friend 함수나 클래스가 무엇인지 모르는 경우 함수와 클래스가 주어진 클래스의 개인 변수에 액세스할 수 있습니다.
마지막으로 구현을 추가할 수 있습니다.
std::ostream& operator<<(std::ostream& s, const CustomVector &vec) {
s << "{ x: " << vec.x << ", " << "y: " << vec.y << " }";
return s;
}
매개변수에 대한 간략한 개요는 출력 스트림의 순간과 사용자 정의 클래스의 인스턴스를 취하는 것을 보여줍니다. 그렇게 나쁘지 않죠?
결과 확인
이제 코드가 실제로 작동하는지 테스트해 보겠습니다.
int main() {
CustomVector vec = CustomVector(1.0f, 1.0f);
CustomVector vec2 = CustomVector(2.0f, 2.0f);
if (vec == vec2) {
std::cout << "They are equal\n";
} else {
std::cout << "They are not equal\n";
}
std::cout << "Vec 1: " << vec << "\n";
std::cout << "Vec 2: " << vec2 << "\n";
std::cout << "Vec 3: " << vec + vec2 << "\n";
return 0;
}
코드를 실행할 때 표시되는 내용은 다음과 같습니다.
이것을 가지고 놀면 더 잘 알 수 있습니다here.
결론
연산자 오버로딩은 때때로 혼란스러울 수 있으므로 이 개념을 사용할 때는 천천히 하는 것이 가장 좋습니다. 혼란스러운 코드를 작성하지 않도록 적절하게 사용하고 작성하는 클래스에 유연성을 허용하는지 확인하십시오. C++의 많은 것들과 마찬가지로 프로그래밍할 때 발에 총을 쏘기 쉬우므로 주의하십시오. 오늘 이 개요에서 뭔가를 배웠기를 바랍니다. :)
Reference
이 문제에 관하여(C++ 프로그래밍: 연산자 오버로딩), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/aboss123/c-programming-operator-overloading-2858텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)