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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | /////////////////////// ///////C++ 집합관계////// ////////////////////// 두가지의 집합관계가 존재함 - Composition - Aggregation Composition 관계는 구성 요소들도 함께 소멸 함. Aggregation 관계는 개별적으로 분리되어 독립적으로 활용(독립적으로 소멸됨). class CNode { friend class CMyList; public: explicit CNode(const char *pszName) { strcpy(m_szName,pszName); } private: char m_szName[20]; CNode *pNext = nullptr; }; class CMyList { public: CMyList() : m_HeadNode("Test Head") {} ~CMyList() { CNode *pNode = m_HeadNode.pNext; CNode *pDelete = nullptr; while(pNode) { pDelete = pNode; pNode = pNode->pNext; delete pDelete; } m_HeadNode,pNext = nullptr; } void AddNewNode(const char *pszName) { CNode *pNode = new CNode(pszName); pNode->pNext = m_HeadNode.pNext; m_HeadNode.pNext = pNode; } void Print() { CNode *pNode = m_HeadNode.pNext; while(pNode) { cout << pNode->m_szName << endl; pNode = pNode->Next; } } private: CNode m_HeadNode; }; class CMyUI { public: CMyUI(CMyList &rList) : m_list(rList); int printMenu() { cout << "[1]Add\t" << "[2]Print\t" << "[0]Exit\n"; cout.flush(); int nInput = 0; cin >> nInput; return nInpit; } void Run() { char szName[20]; int nInput = 0; whild((nInput = printMenu()) > 0) { switch(nInput) { case 1: cout << "이름: "; cout.flush(); cin >> szName; m_list.AddNewNode(szName); break; case 2: m_list.print(); break; default: break; } } } private: //UI 클래스 내부에 자료구조가 포함된다. //전형적인 Composition관계 CMyList m_list; //위 Composition관계를 Aggregation관계로 변경 하기 위해서는 포인터나 참조로 선언 해야 된다. //참조로 선언된 변수는 생성자에서 무조건 초기화를 해야 됨. CMyList &m_list; }; int main(void) { CMyUI ui; ui.Run(); //참조로 선언을 했기 때문에 선언 형태도 변경됨// //CList 와 CMyUI의 객체를 별도로 선언하고 연결 했기 때문에 Aggregation 관계로 변경 된다. CList list; CMyUI ui2(list); ui2.Run(); return 0; } 참고 문헌) 이것이 C++이다 | cs |
집합관례(Composition,Aggregation)
2018. 4. 3. 15:18