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

구성 관계 (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