일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 산책하기 좋은 곳
- 동영상 강의
- 실습
- Windows Forms
- 네트워크 프로그래밍
- 안드로이드 앱 개발
- 졸업 작품 소재
- 표준 라이브러리 함수
- 동영상
- 언제나휴일
- 추천
- 졸업 작품
- 파이썬
- 표준 입출력
- 유튜브 동영상 강의
- 언제나 휴일
- 알고리즘
- 원격 제어 프로그램
- c언어
- 소스 코드
- 프로젝트
- 캡슐화
- 소켓 통신
- c#
- 강의
- C++
- 충남 천안
- 실습으로 다지는 c#
- 클래스 다이어그램
- 무료 동영상 강의
Archives
- Today
- Total
프로그래밍 언어 및 기술 [언제나휴일]
[C++] 62. 집합(AGGREGATION) 관계 본문
집합 관계는 개체를 보관하는 컬렉션과 개체 사이의 관계입니다.
“필통은 연필을 보관할 수 있다.” 처럼 컬렉션 필통과 보관할 연필 사이의 관계입니다. 전산에서 자료구조라고 말하는 컬렉션과 컬렉션에 보관할 개체 사이의 관계입니다.
집합 관계와 구성 관계는 “가지고 있다.” 혹은 “가질 수 있다.”로 표현할 수 있고 영어로 “Has a”로 표현할 수 있어서 “Has a”관계라고도 부릅니다.
집합 관계는 컬렉션과 보관할 개체의 생성과 소멸은 독립적입니다. 참고로 구성 관계는 사람과 눈처럼 소유 개체를 생성할 때 피 소유 개체가 만들어지고 소유 개체가 소멸할 때 피 소유 개체도 같이 해제하는 특징을 갖습니다. 다음은 집합 관계에 있는 Pencil과 PencilCase를 구현한 예제 코드입니다.
//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
'C & C++ > 디딤돌 C++' 카테고리의 다른 글
[C++] 66. 의존(DEPENDENCY) 관계 (0) | 2024.04.13 |
---|---|
[C++] 65. 연관(ASSOCIATION) 관계 (0) | 2024.04.13 |
[C++] 64. 직접 연관(DIRECTED ASSOCIATION) 관계 (0) | 2024.04.13 |
[C++] 63. 구성(COMPOSITION) 관계 (0) | 2024.04.13 |
[C++] 61. 클래스 간의 관계 (0) | 2024.04.13 |
[C++] 60. 템플릿 클래스 (0) | 2024.04.11 |
[C++] 58. 템플릿(TEMPLATE) 개요 59. 전역 템플릿 함수 (0) | 2024.04.11 |
[C++] 57. 예외 처리 (0) | 2024.04.11 |