언어 자료구조 알고리즘/디딤돌 C++

[C++] 62. 집합(AGGREGATION) 관계

언제나휴일 2016. 5. 1. 12:12
반응형

[C++] 62. 집합(AGGREGATION) 관계


집합(AGGREGATION) 관계


집합 관계는 개체를 보관하는 컬렉션과 개체 사이의 관계입니다.

집합 관계

필통은 연필을 보관할 수 있다.” 처럼 컬렉션 필통과 보관할 연필 사이의 관계입니다. 전산에서 자료구조라고 말하는 컬렉션과 컬렉션에 보관할 개체 사이의 관계입니다.

 

집합 관계와 구성 관계는 가지고 있다.” 혹은 가질 수 있다.”로 표현할 수 있고 영어로 “Has a”로 표현할 수 있어서 “Has a”관계라고도 부릅니다.

 

집합 관계는 컬렉션과 보관할 개체의 생성과 소멸은 독립적입니다. 참고로 구성 관계는 사람과 눈처럼 소유 개체를 생성할 때 피 소유 개체가 만들어지고 소유 개체가 소멸할 때 피 소유 개체도 같이 해제하는 특징을 갖습니다. 다음은 집합 관계에 있는 Pencil PencilCase를 구현한 예제 코드입니다.


62. 집합 관계.zip


//Pencil.h

#pragma once

#include <iostream>

#include <string>

using namespace std;

class Pencil

{

    string company;

    int price;   

public:

    Pencil(string company,int price);

    string GetCompany()const;

    int GetPrice()const;

};

//Pencil.cpp

#include "Pencil.h"

 

Pencil::Pencil(string company,int price)

{

    this->company = company;

    this->price = price;

}

string Pencil::GetCompany()const

{

    return company;

}

int Pencil::GetPrice()const

{

    return price;

}

 

//PencilCase.h

#pragma once

#include "Pencil.h"

class PencilCase

{

    Pencil **base;

    const size_t capacity;

    size_t count;

public:

    PencilCase(size_t capacity);

    ~PencilCase(void);

    bool PushBack(Pencil *pencil);

    void List()const;

    size_t GetCount()const;

    Pencil *&operator[](size_t index);

};

 

//PencilCase.cpp

#include "PencilCase.h"

#include <iomanip>

using namespace std;

PencilCase::PencilCase(size_t capacity):capacity(capacity)

{

    base = new Pencil *[capacity];

    count = 0;

}

PencilCase::~PencilCase(void)

{

    delete[] base;

}

bool PencilCase::PushBack(Pencil *pencil)

{

    if(count<capacity)

    {

        base[count] = pencil;

        count++;

        return true;

    }

    return false;

}

 

void PencilCase::List()const

{

    //left:왼쪽 정렬, right:오른쪽 정렬, setw(n):폭을 n으로 설정

    cout<<left<<setw(10)<<"회사"<<right<<setw(5)<<"가격"<<endl;

    for(size_t i = 0; i<count; i++)

    {

        cout<<left<<setw(10)<<base[i]->GetCompany();

        cout<<right<<setw(5)<<base[i]->GetPrice()<<endl;

    }

}

 

size_t PencilCase::GetCount()const

{

    return count;

}

 

Pencil *&PencilCase::operator[](size_t index)

{

    if((index<0)||(index>=count))

    {

        throw "인덱스가 범위를 벗어났습니다.";

    }

    return base[index];

}

 

//Program.cpp

#include "PencilCase.h"

int main()

{   

    PencilCase pc(10);

 

    pc.PushBack(new Pencil("연필좋아",1000));

    pc.PushBack(new Pencil("연필나라",1200));

    pc.PushBack(new Pencil("연필좋아",1400));

    pc.PushBack(new Pencil("연필나라",1200));

    pc.PushBack(new Pencil("연필나라",1600));

    pc.PushBack(new Pencil("연필좋아",1100));

    pc.PushBack(new Pencil("연필나라",1300));

    pc.PushBack(new Pencil("연필좋아",1500));

    pc.PushBack(new Pencil("연필좋아",500));

    pc.List();

 

    size_t count = pc.GetCount();

    for(size_t i=0; i<count;i++)

    {

        delete pc[i];

    }

   

    return 0;

}

 

실행 결과

회사       가격

연필좋아   1000

연필나라   1200

연필좋아   1400

연필나라   1200

연필나라   1600

연필좋아   1100

연필나라   1300

연필좋아   1500

연필좋아    500


61. 클래스 간의 관계


62. 집합(AGGREGATION) 관계


63. 구성(COMPOSITION) 관계


64. 직접 연관(DIRECTED ASSOCIATION) 관계


65. 연관(ASSOCIATION) 관계


66. 의존(DEPENDENCY) 관계


67. 실현(REALIZATION) 관계


27. 상속(일반화 관계) 개요

반응형