산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

C++ 연산자 오버로딩 실전 가이드: 문법, 접근법, 코드 예제

연산자 오버로딩이란?

C++에서 연산자 오버로딩을 사용하면 동일한 범위 내에서 연산자에게 여러 의미를 부여할 수 있습니다. 목표는 사용자 정의 타입에 대해 연산자에게 맞춤 동작을 부여하는 것입니다.

연산자 오버로딩으로 대부분의 C++ 연산자를 재정의하고 단일 기호로 다른 연산을 수행할 수 있습니다.

이 튜토리얼에서 배울 내용:

문법

C++ 연산자를 오버로드하려면 클래스 내부에 특수 멤버 함수를 다음과 같이 정의합니다:

class class_name {
    ...
public:
    return_type operator symbol (argument(s)) {
        ...
    }
    ...
};

구성 요소:

예제 1:

#include <iostream>
using namespace std;
class TestClass {
private:
    int count;
public:
    TestClass() : count(5) {}
    void operator --() {
        count = count - 3;
    }
    void Display() {
        cout << "Count: " << count;
    }
};
int main() {
    TestClass tc;
    --tc;
    tc.Display();
    return 0;
}

출력:

C++ 연산자 오버로딩 실전 가이드: 문법, 접근법, 코드 예제

코드 스크린샷:

C++ 연산자 오버로딩 실전 가이드: 문법, 접근법, 코드 예제

코드 설명:

  1. 입출력 시설을 위해 <iostream> 포함
  2. 간결성을 위해 std 네임스페이스 사용
  3. TestClass 클래스 정의
  4. count를 private 데이터 멤버로 지정
  5. count를 5로 초기화하는 public 생성자 제공
  6. 전위 -- 연산자 오버로드하여 count에서 3 감소
  7. 현재 값 출력용 Display() 구현
  8. main()에서 인스턴스 생성, 오버로드된 연산자 적용, 결과 표시

C++에서 연산자 오버로딩의 다양한 접근법

오버로딩은 다음을 통해 달성 가능:

  1. 멤버 함수
  2. 비멤버 함수 (프렌드 또는 자유 함수)
  3. 프렌드 함수 (private 데이터 접근 필요 시)

모든 C++ 연산자를 오버로드할 수 있는가?

아닙니다. 다음 연산자들은 오버로드할 수 없습니다:

기억할 사항

  1. 오버로딩은 사용자 정의 타입만 영향; 내장 타입은 원래 동작 유지
  2. 대입(=)과 주소-연산자(&)는 복사 생성자나 대입 연산자 제공 클래스에 자동 오버로드
  3. 연산자 우선순위는 변경되지 않음; 괄호로 평가 순서 강제 가능
  4. 세 연산자 ::, ., ?:는 명시적으로 오버로딩 금지

연산자 오버로딩 규칙

연산자 오버로딩 방법

예제 1: 증가 연산자

#include <iostream>
using namespace std;
class OperatorOverload {
private:
    int x;
public:
    OperatorOverload() : x(10) {}
    void operator ++() {
        x += 2;
    }
    void Print() {
        cout << "The Count is: " << x;
    }
};
int main() {
    OperatorOverload ov;
    ++ov;
    ov.Print();
    return 0;
}

출력:

C++ 연산자 오버로딩 실전 가이드: 문법, 접근법, 코드 예제

코드 스크린샷:

C++ 연산자 오버로딩 실전 가이드: 문법, 접근법, 코드 예제

코드 설명:

  1. <iostream> 포함 및 std 네임스페이스 사용
  2. private int x를 가진 OperatorOverload 클래스 정의
  3. 생성자에서 x를 10으로 초기화
  4. 전위 ++ 연산자 오버로드하여 x에 2 더하기
  5. 업데이트된 값 표시용 Print() 구현
  6. main()에서 객체 생성, 오버로드된 연산자 호출, 결과 출력

예제 2: 복소수 덧셈

#include <iostream>
using namespace std;
class TestClass {
private:
    int real, over;
public:
    TestClass(int rl = 0, int ov = 0) : real(rl), over(ov) {}
    TestClass operator + (TestClass const &obj) {
        TestClass result;
        result.real = real + obj.real;
        result.over = over + obj.over;
        return result;
    }
    void print() {
        cout << real << " + i" << over << endl;
    }
};
int main() {
    TestClass c1(9, 5), c2(4, 3);
    TestClass c3 = c1 + c2;
    c3.print();
} 

출력:

C++ 연산자 오버로딩 실전 가이드: 문법, 접근법, 코드 예제

코드 스크린샷:

C++ 연산자 오버로딩 실전 가이드: 문법, 접근법, 코드 예제

코드 설명:

  1. <iostream> 포함 및 std 네임스페이스 사용
  2. real과 over 컴포넌트를 가진 TestClass 정의
  3. 초기화용 생성자 제공
  4. + 연산자 오버로드로 복소수 덧셈 수행
  5. 합을 담은 새 TestClass 인스턴스 반환
  6. 복소수 표시용 print() 구현
  7. main()에서 두 인스턴스 생성, 덧셈, 결과 출력

요약

C 언어

  1. C++ 배열을 함수에 전달하는 방법: 실전 가이드
  2. Python 연산자 오버로딩 마스터하기: 실전 가이드
  3. C++ 연산자 총정리: 종류, 예제, 샘플 프로그램
  4. C++ do-while 루프: 문법, 실전 예제, 중첩 루프
  5. C++ 포인터 완전 정복: 개념, 예제, 실전 활용
  6. C++ char 타입 마스터: 선언, ASCII 코드, 문자열 변환 기법
  7. C++ 구조체(struct) 완벽 가이드: 선언, 인스턴스, 포인터, 함수 인자 전달
  8. C++ std::list 마스터하기: 문법, 함수, 실전 예제
  9. C++ 함수 완전 정복: 실전 코드 예제로 이해하기
  10. 파이썬 람다 함수 마스터하기: 실용 예제 & 모범 사례