C++ 산술 연산자 오버로딩 (Arithmetic Operator Overloading)

2021. 3. 16. 00:19·C++/Overloading

산술 연산자 오버로딩 (Arithmetic Operator Overloading)

  • 클래스 안에서 정의해도 되고, 밖에서 정의해도 된다.

    • 안에서 정의할 때는 this로 첫 번째 파라미터를 받게되므로 파라미터가 하나 줄어든다.

    • 밖에서 정의할 때는 클래스에서 friend 키워드로 선언해주는게 편할 수도 있다.


예제

  • 오버로딩을 하지 않은 예제

    #include <iostream>
    
    class Cents
    {
      int    cents_;
    
    public:
      Cents(const int& cents = 0) { cents_ = cents; }
      int        getCents() const { return cents_; }
      int&    getCents() { return cents_; }
    };
    
    Cents    add(const Cents& c1, const Cents& c2)
    {
      return Cents(c1.getCents() + c2.getCents());
    }
    
    int        main()
    {
      using namespace std;
    
      Cents cents1(6);
      Cents cents2(8);
    
      cout << add(cents1, cents2).getCents() << endl;
    }
    
    /* stdout
    14
    */
  • + 연산자 오버로딩을 하면 다음과 같다.

    #include <iostream>
    
    class Cents
    {
      int    cents_;
    
    public:
      Cents(const int& cents = 0) { cents_ = cents; }
      int        getCents() const { return cents_; }
      int&    getCents() { return cents_; }
    };
    
    Cents    operator + (const Cents& c1, const Cents& c2)
    {
      return Cents(c1.getCents() + c2.getCents());
    }
    
    int        main()
    {
      using namespace std;
    
      Cents cents1(6);
      Cents cents2(8);
    
      cout << (cents1 + cents2 + Cents(6)).getCents() << endl;
    }
    
    /* stdout
    20
    */
  • 클래스 안에서 정의하면 다음과 같다.

    #include <iostream>
    
    class Cents
    {
      int    cents_;
    
    public:
      Cents(const int& cents = 0) { cents_ = cents; }
      int        getCents() const { return cents_; }
      int&    getCents() { return cents_; }
    
      Cents    operator + (const Cents& c2)
      {
        return Cents(cents_ + c2.cents_);
      }
    };
    
    int        main()
    {
      using namespace std;
    
      Cents cents1(6);
      Cents cents2(8);
    
      cout << (cents1 + cents2 + Cents(16)).getCents() << endl;
    }
    
    /* stdout
    30
    */
저작자표시 (새창열림)

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

C++ 증감 연산자 오버로딩 (Increment and Decrement Operator Overloading)  (0) 2021.03.16
C++ 비교 연산자 오버로딩 (Comparison Operator Overloading)  (0) 2021.03.16
C++ 단항 연산자 오버로딩 (Unary Operator Overloading)  (0) 2021.03.16
C++ 입출력 연산자 오버로딩 (I/O Operator Overloading)  (0) 2021.03.16
C++ 오버로딩 (Overloading)  (0) 2021.03.16
'C++/Overloading' 카테고리의 다른 글
  • C++ 비교 연산자 오버로딩 (Comparison Operator Overloading)
  • C++ 단항 연산자 오버로딩 (Unary Operator Overloading)
  • C++ 입출력 연산자 오버로딩 (I/O Operator Overloading)
  • C++ 오버로딩 (Overloading)
Caniro
Caniro
  • Caniro
    Minimalism
    Caniro
  • 전체
    오늘
    어제
    • 분류 전체보기 (317)
      • Algorithm (13)
        • 알기 쉬운 알고리즘 (10)
        • Search (1)
        • Sort (2)
      • Arduino (0)
      • C++ (185)
        • Class (46)
        • Exception (6)
        • Library (51)
        • Overloading (10)
        • SmartPointer (5)
        • Syntax (33)
        • TBC++ (23)
        • Templates (9)
        • VisualStudio (2)
      • Embedded (1)
      • Git (4)
      • Java (5)
      • Linux (16)
        • Error (1)
        • Linux Structure (11)
      • MacOS (7)
      • OS (1)
        • Concurrency (1)
      • Python (21)
        • Class (1)
        • Function (2)
        • Syntax (17)
      • Raspberrypi (9)
      • Review (1)
      • Utility (12)
        • VSCode (5)
        • VirtualBox (3)
      • Web (8)
        • Nginx (1)
        • React (3)
        • Django (1)
      • Windows (20)
        • Registry (3)
        • WSL (1)
        • DeviceDriver (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    윈도우 명령어
    citrix workspace
    시스템 복구
    KakaoTalk
    windows
    vscode
    스프링
    logi options
    윈도우
    Solaris 10
    알림
    unix
    java
    그림판
    Workspace
    MacOS
    mspaint
    Windows 11
    spring
    EXCLUDE
    dism
    스프링 프레임워크 핵심 기술
    로지텍 마우스 제스처
    맥북 카카오톡 알림 안뜸
    백기선
    SunOS 5.1
    제외
    SFC
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Caniro
C++ 산술 연산자 오버로딩 (Arithmetic Operator Overloading)
상단으로

티스토리툴바