본문 바로가기
C++/기본

[C++] 2. 연산자(2)

by 위니밍 2025. 3. 29.
반응형
📌 요약: 연산자 재정의 | 멤버 함수 vs 전역 함수 | 체이닝 기법 | StringBuilder 활용 예제

🔁 연산자 재정의 (Operator Overloading)

C++에서는 사용자 정의 타입에 대해 연산자 기능을 확장할 수 있습니다. 연산자 재정의를 통해 클래스 간의 연산을 직관적으로 구현할 수 있습니다.

✅ 기본 형식
// 멤버 함수 방식
반환형 클래스이름::operator연산자기호(매개변수) { ... }

// 전역 함수 방식
반환형 operator연산자기호(매개변수1, 매개변수2) { ... }

예를 들어, 벡터(Point) 구조체에서 + 연산자를 재정의하면 두 포인트를 더하는 연산을 직접 구현할 수 있습니다.

🧩 멤버 함수 방식 예제
struct Point
{
    float x, y;

    Point(float x, float y) : x(x), y(y) {}

    Point operator+(const Point& other)
    {
        return Point(this->x + other.x, this->y + other.y);
    }
};
🌐 전역 함수 방식 예제
Point operator-(const Point& left, const Point& right)
{
    return Point(left.x - right.x, left.y - right.y);
}

이처럼 전역 함수로도 연산자 재정의가 가능하며, 클래스 외부에서도 유연하게 사용할 수 있습니다.

⛓️ 연산자 체이닝 (Operator Chaining)

Append 함수가 *this를 반환하면 여러 메서드를 이어서 호출할 수 있습니다. 이를 체이닝이라 하며, 코드를 간결하게 만들 수 있습니다.

✅ 클래스 정의
class StringBuilder
{
    char buffer[2048];
    int curIndex = 0;

public:
    StringBuilder& Append(const char* text)
    {
        int index = 0;
        while (text[index] != '\0')
        {
            buffer[curIndex++] = text[index++];
        }
        buffer[curIndex] = '\0';
        return *this;
    }

    string ToString() { return buffer; }
};
📌 사용 예:
StringBuilder sb;
sb.Append("IP : ").Append("8.8.8.8").Append(" Port : ").Append("5555");

cout << sb.ToString(); 

결과는 다음과 같습니다:

IP : 8.8.8.8 Port : 5555
📦 실제 예제 실행 결과
sb result : IP : 8.8.8.8 Port : 5555 ID : admin PASS : 1234

이처럼 StringBuilder체이닝 방식을 활용하면 포맷팅 문자열을 직관적으로 연결할 수 있습니다.

반응형

'C++ > 기본' 카테고리의 다른 글

[C++] 6. 포인터  (0) 2025.03.29
[C++] 5. 함수  (0) 2025.03.29
[C++] 4. 반복문  (0) 2025.03.29
[C++] 3. 조건문  (0) 2025.03.29
[C++] 2. 연산자(1)  (0) 2025.03.29