C++ 구성 관계 (Composition Relationship)

2021. 3. 19. 19:37·C++/Class

구성 관계 (Composition Relationship)

  • 몬스터 클래스와 그의 멤버인 좌표 클래스로 비유했다.

  • Monster 클래스의 멤버로 존재하는 Position2D 클래스 인스턴스 location_ (Monster.h 참고)

    • 이 location_ 인스턴스는 Monster 클래스로 만들어진 mon1 인스턴스의 Part-of라고 할 수 있다.

    • mon1이 소멸하면 자동으로 location_도 소멸한다.

    main.cpp

    #include "Monster.h"
    
    int        main()
    {
        using namespace std;
    
        Monster mon1("Sanson", Position2D(0, 0));
    
        cout << mon1 << endl;
        {
            mon1.moveTo(Position2D(1, 1));
            cout << mon1 << endl;
        }
    }
    
    /* stdout
    Sanson 0 0
    Sanson 1 1
    */

    Monster.h

    #pragma once
    #include "Position2D.h"
    
    class Monster
    {
      std::string   name_;
      Position2D    location_;
    
    public:
      Monster(const std::string name_in, const Position2D & pos_in)
        : name_{name_in}, location_{pos_in}
      {}
    
      void    moveTo(const Position2D& pos_target)
      {
        location_.set(pos_target);
      }
    
      friend std::ostream& operator << (std::ostream& out, const Monster& monster)
      {
        out << monster.name_ << ' ' << monster.location_;
        return (out);
      }
    };

    Position2D.h

    #pragma once
    
    #include <iostream>
    
    class Position2D
    {
      int    x_;
      int    y_;
    
    public:
      Position2D(const int &x_in, const int &y_in)
        : x_(x_in), y_(y_in)
      {}
    
      void    set(const Position2D& pos_target)
      {
        set(pos_target.x_, pos_target.y_);
      }
    
      void    set(const int& x_target, const int& y_target)
      {
        x_ = x_target;
        y_ = y_target;
      }
    
      friend std::ostream& operator << (std::ostream& out, const Position2D& pos)
      {
        out << pos.x_ << ' ' << pos.y_;
        return (out);
      }
    };
저작자표시 (새창열림)

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

C++ 의존 관계 (Dependency)  (0) 2021.03.19
C++ 연계, 제휴 관계 (Association)  (0) 2021.03.19
C++ 객체들의 관계 (Object Relationship)  (0) 2021.03.19
C++ Nested Types  (0) 2021.03.16
C++ 익명 객체 (Anonymous Class)  (0) 2021.03.16
'C++/Class' 카테고리의 다른 글
  • C++ 의존 관계 (Dependency)
  • C++ 연계, 제휴 관계 (Association)
  • C++ 객체들의 관계 (Object Relationship)
  • C++ Nested Types
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)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Caniro
C++ 구성 관계 (Composition Relationship)
상단으로

티스토리툴바