Data structures 01.2: C++ classes 동의대학교 멀티미디어공학과 이광의교수
Today’s topic 자료구조의 정의 C++클래스: 추상자료형의 구현 포인터 정의1: 자료구조는 자료를 효율적으로 이용할 수 있도록 컴퓨터에 저장하는 방법이다. 정의2: 자료구조는 추상자료형이다. 정의3: 자료구조는 잘 알려지고 유용한 추상자료형이다. C++클래스: 추상자료형의 구현 클래스 기초 클래스 구현 예 1: 채널목록 추상자료형의 (정렬되지 않은 목록) 구현 클래스 구현 예 2: 채널목록 추상자료형의 (채널번호 순으로 정렬된 목록) 구현 포인터 포인터 기초 포인터 활용 예 1 Dept. of Multimedia Engineering, DongEui Univ.(2)
Fundamentals of class 클래스란 무엇인가? 변수와 함수를 하나의 단위로 묶기 위한 C++ 문법 프로그래밍 언어에서 객체는 데이터와 그 데이터에 대한 연산으로 구성된다. 객체지향프로그래밍의 핵심개념: 객체(=클래스), 상속, 다형성 Dept. of Multimedia Engineering, DongEui Univ.(3)
Fundamentals of class 클래스 문법 클래스의 예: 클래스의 선언 및 활용, 저장방식의 결정 class channelList { … public: channelList myLst; ◀ string chNameOf (int nu); // class channelList myLst; int chNumOf (string na); myLst.insertCh (7, “시네마TV”); ◀ void deleteNum (int nu); myLst.insertCh (2, “CJ홈쇼핑”); void deleteName (string na); myLst.insertCh (14, “동의TV”); void insertCh (int nu, string na); cout << myLst.chNumOf (“시네마TV”); private: cout << myLst.chNameOf (2); int chn[100]; // channel numbers myLst.deleteNum(7); string name[100]; // channel names myLst.deleteName(“동의TV”); int size; … }; [4] [3] [2] [1] size [0] chn name Dept. of Multimedia Engineering, DongEui Univ.(4)
Fundamentals of class 클래스 문법 클래스의 예: 클래스의 선언 및 활용, 저장방식의 결정 class channelList { … public: channelList myLst; string chNameOf (int nu); // class channelList myLst; int chNumOf (string na); myLst.insertCh (7, “시네마TV”); ◀ void deleteNum (int nu); myLst.insertCh (2, “CJ홈쇼핑”); ◀ void deleteName (string na); myLst.insertCh (14, “동의TV”); void insertCh (int nu, string na); cout << myLst.chNumOf (“시네마TV”); private: cout << myLst.chNameOf (2); int chn[100]; // channel numbers myLst.deleteNum(7); string name[100]; // channel names myLst.deleteName(“동의TV”); int size; … }; [4] [3] [2] [1] size 1 7 시네마TV [0] chn name Dept. of Multimedia Engineering, DongEui Univ.(5)
Fundamentals of class 클래스 문법 클래스의 예: 클래스의 선언 및 활용, 저장방식의 결정 class channelList { … public: channelList myLst; string chNameOf (int nu); // class channelList myLst; int chNumOf (string na); myLst.insertCh (7, “시네마TV”); void deleteNum (int nu); myLst.insertCh (2, “CJ홈쇼핑”); ◀ void deleteName (string na); myLst.insertCh (14, “동의TV”); ◀ void insertCh (int nu, string na); cout << myLst.chNumOf (“시네마TV”); private: cout << myLst.chNameOf (2); int chn[100]; // channel numbers myLst.deleteNum(7); string name[100]; // channel names myLst.deleteName(“동의TV”); int size; … }; [4] [3] [2] 2 CJ홈쇼핑 [1] size 2 7 시네마TV [0] chn name Dept. of Multimedia Engineering, DongEui Univ.(6)
Fundamentals of class 클래스 문법 클래스의 예: 클래스의 선언 및 활용, 저장방식의 결정 class channelList { … public: channelList myLst; string chNameOf (int nu); // class channelList myLst; int chNumOf (string na); myLst.insertCh (7, “시네마TV”); void deleteNum (int nu); myLst.insertCh (2, “CJ홈쇼핑”); void deleteName (string na); myLst.insertCh (14, “동의TV”); ◀ void insertCh (int nu, string na); cout << myLst.chNumOf (“시네마TV”); ◀ private: cout << myLst.chNameOf (2); ◀ int chn[100]; // channel numbers myLst.deleteNum(7); string name[100]; // channel names myLst.deleteName(“동의TV”); int size; … }; [4] [3] 14 동의TV [2] 2 CJ홈쇼핑 [1] size 3 7 시네마TV [0] chn name Dept. of Multimedia Engineering, DongEui Univ.(7)
Fundamentals of class 클래스 문법 클래스의 예: 클래스의 선언 및 활용, 저장방식의 결정 class channelList { … public: channelList myLst; string chNameOf (int nu); // class channelList myLst; int chNumOf (string na); myLst.insertCh (7, “시네마TV”); void deleteNum (int nu); myLst.insertCh (2, “CJ홈쇼핑”); void deleteName (string na); myLst.insertCh (14, “동의TV”); void insertCh (int nu, string na); cout << myLst.chNumOf (“시네마TV”); ◀ private: cout << myLst.chNameOf (2); ◀ int chn[100]; // channel numbers myLst.deleteNum(7); ◀ string name[100]; // channel names myLst.deleteName(“동의TV”); int size; … }; [4] [3] 14 동의TV [2] 2 CJ홈쇼핑 [1] size 3 7 시네마TV [0] chn name Dept. of Multimedia Engineering, DongEui Univ.(8)
Fundamentals of class 클래스 문법 클래스의 예: 클래스의 선언 및 활용, 저장방식의 결정 class channelList { … public: channelList myLst; string chNameOf (int nu); // class channelList myLst; int chNumOf (string na); myLst.insertCh (7, “시네마TV”); void deleteNum (int nu); myLst.insertCh (2, “CJ홈쇼핑”); void deleteName (string na); myLst.insertCh (14, “동의TV”); void insertCh (int nu, string na); cout << myLst.chNumOf (“시네마TV”); private: cout << myLst.chNameOf (2); int chn[100]; // channel numbers myLst.deleteNum(7); ◀ string name[100]; // channel names myLst.deleteName(“동의TV”); int size; … }; [4] [3] 14 동의TV [2] 2 CJ홈쇼핑 [1] size 2 [0] chn name Dept. of Multimedia Engineering, DongEui Univ.(9)
Fundamentals of class 클래스 문법 클래스의 예: 클래스의 선언 및 활용, 저장방식의 결정 class channelList { … public: channelList myLst; string chNameOf (int nu); // class channelList myLst; int chNumOf (string na); myLst.insertCh (7, “시네마TV”); void deleteNum (int nu); myLst.insertCh (2, “CJ홈쇼핑”); void deleteName (string na); myLst.insertCh (14, “동의TV”); void insertCh (int nu, string na); cout << myLst.chNumOf (“시네마TV”); private: cout << myLst.chNameOf (2); int chn[100]; // channel numbers myLst.deleteNum(7); ◀ string name[100]; // channel names myLst.deleteName(“동의TV”); ◀ int size; … }; [4] [3] [2] 14 동의TV [1] size 2 2 CJ홈쇼핑 [0] chn name Dept. of Multimedia Engineering, DongEui Univ.(10)
Fundamentals of class 클래스 문법 클래스의 예: 클래스의 선언 및 활용, 저장방식의 결정 class channelList { … public: channelList myLst; string chNameOf (int nu); // class channelList myLst; int chNumOf (string na); myLst.insertCh (7, “시네마TV”); void deleteNum (int nu); myLst.insertCh (2, “CJ홈쇼핑”); void deleteName (string na); myLst.insertCh (14, “동의TV”); void insertCh (int nu, string na); cout << myLst.chNumOf (“시네마TV”); private: cout << myLst.chNameOf (2); int chn[100]; // channel numbers myLst.deleteNum(7); string name[100]; // channel names myLst.deleteName(“동의TV”); ◀ int size; … }; [4] [3] [2] [1] size 2 CJ홈쇼핑 [0] chn name Dept. of Multimedia Engineering, DongEui Univ.(11)
Fundamentals of class 클래스 문법 멤버함수의 구현 class channelList { string channelList::chNameOf (int nu) { public: for (int i=0; i<size; i++) { string chNameOf (int nu); ◀ if (nu == chn[i]) { int chNumOf (string na); return name[i]; void deleteNum (int nu); } void deleteName (string na); } void insertCh (int nu, string na); return 0; // not found private: } int chn[100]; // channel numbers string name[100]; // channel names int size; }; [4] [3] 14 동의TV [2] 2 CJ홈쇼핑 [1] size 3 7 시네마TV [0] chn name Dept. of Multimedia Engineering, DongEui Univ.(12)
Fundamentals of class 클래스 문법 멤버함수의 구현 class channelList { void channelList::deleteNum (int nu) { public: int i = 0; string chNameOf (int nu); for (; i<size; i++) { int chNumOf (string na); if (nu == chn[i]) break; void deleteNum (int nu); ◀ } void deleteName (string na); if (i==size) return; // not found void insertCh (int nu, string na); size--; private: for (; i<size; i++;) { int chn[100]; // channel numbers chn[i] = chn[i+1]; string name[100]; // channel names name[i] = name[i+1]; int size; } }; } [4] [3] 14 동의TV [2] 2 CJ홈쇼핑 [1] size 3 7 시네마TV [0] chn name Dept. of Multimedia Engineering, DongEui Univ.(13)
Fundamentals of class 클래스 문법 멤버함수의 구현 class channelList { void public: channelList::insertCh (int nu, string na) { string chNameOf (int nu); if (size==100) return; // memory full int chNumOf (string na); chn[size] = nu; void deleteNum (int nu); name[size] = na; void deleteName (string na); size++; void insertCh (int nu, string na); ◀ } private: int chn[100]; // channel numbers string name[100]; // channel names int size; }; [4] [3] 14 동의TV [2] 2 CJ홈쇼핑 [1] size 3 7 시네마TV [0] chn name Dept. of Multimedia Engineering, DongEui Univ.(14)
Fundamentals of class 클래스 문법 멤버함수의 구현: 생성자와 소멸자 class channelList { … public: channelList myLst; ◀ string chNameOf (int nu); // class channelList myLst; int chNumOf (string na); myLst.insertCh (7, “시네마TV”); void deleteNum (int nu); … void deleteName (string na); void insertCh (int nu, string na); channelList::channelList ( ) { channelList ( ); // constructor size = 0; ~channelList ( ); // destructor } private: int chn[100]; // channel numbers string name[100]; // channel names int size; }; [4] [3] [2] [1] size [0] chn name Dept. of Multimedia Engineering, DongEui Univ.(15)
An Implementation of channel list 클래스의 활용 클래스의 예: 채널 class channel { public: channel ( ) { }; // default constructor channel (int ch, string na) { // constructor chn = ch; name = na; }; public: // public으로 수정 ★★★ int chn; // channel number string name; // channel name } … channel mych1 (14, “동의TV”); channel mych2; mych2.chn = 2; mych2.name = “CJ홈쇼핑”; cout << mych1.chn << mych2.name << endl; [4] [3] [2] [1] size [0] chn name mych1.chn mych1.name mych1 14 동의TV mych2 2 CJ홈쇼핑 Dept. of Multimedia Engineering, DongEui Univ.(16)
An Implementation of channel list 클래스의 활용 클래스의 예: 채널목록 (정렬되지 않은 순서로 저장) class channel { … } … class channelList { channelList myLst; public: myLst.insertCh (7, “시네마TV”); string chNameOf (int nu); myLst.insertCh (2, “CJ홈쇼핑”); int chNumOf (string na); myLst.insertCh (14, “동의TV”); void deleteNum (int nu); cout << myLst.chNumOf (“시네마TV”); void deleteName (string na); cout << myLst.chNameOf (2); void insertCh (int nu, string na); myLst.deleteNum(7); channelList ( ) { // constructor myLst.deleteName(“동의TV”); size = 0; … } private: channel ch[100]; // class channel ch[100]; int size; }; [4] [3] [2] [1] size [0] class channel Dept. of Multimedia Engineering, DongEui Univ.(17)
An Implementation of channel list 클래스의 활용 클래스의 예: 채널목록 (정렬되지 않은 순서로 저장) class channel { … } int class channelList { chNumOf (string na) { public: for (int i=0; i<size; i++) { string chNameOf (int nu); if (na == ch[i].name) return ch[i].chn; int chNumOf (string na); ◀ } void deleteNum (int nu); return 0; // not found void deleteName (string na); } void insertCh (int nu, string na); channelList ( ) { // constructor size = 0; } private: channel ch[100]; // class channel int size; }; [4] [3] [2] [1] size [0] class channel Dept. of Multimedia Engineering, DongEui Univ.(18)
An Implementation of channel list 클래스의 활용 클래스의 예: 채널목록 (정렬되지 않은 순서로 저장) class channel { … } void class channelList { insertCh (int nu, string na) { public: if (size==100) return; string chNameOf (int nu); ch[size].chn = nu; int chNumOf (string na); ch[size].name = na; void deleteNum (int nu); size++; void deleteName (string na); } void insertCh (int nu, string na); ◀ channelList ( ) { // constructor size = 0; } private: channel ch[100]; // class channel int size; }; [4] [3] [2] [1] size [0] class channel Dept. of Multimedia Engineering, DongEui Univ.(19)
An Implementation of channel list 클래스의 활용 클래스의 예: 채널목록 (채널 번호가 증가하는 순서로 저장) class channel { … } string class channelList { chNameOf (int nu) { public: return binSearch(nu, 0, size-1); string chNameOf (int nu); ◀ } int chNumOf (string na); void deleteNum (int nu); string binSearch(int nu, int l, int h) { void deleteName (string na); while (u>=l) { void insertCh (int nu, string na); int m = (u+l)/2; channelList ( ) { size = 0; }; if (na==ch[m].chn) return ch[m].name; protected: else if (na>ch[m].nu) l = m+1; string binSearch(int nu, int l, int u); ◀ else h = m-1 private: } channel ch[100]; // class channel return -1; // not found int size; } }; Dept. of Multimedia Engineering, DongEui Univ.(20)
practice makes perfect!!! summaries C++클래스: 추상자료형의 구현 클래스의 기초 클래스 구현 예 1: 채널목록 추상자료형의 (정렬되지 않은 목록) 구현 클래스 구현 예 2: 채널목록 추상자료형의 (채널번호 순으로 정렬된 목록) 구현 클래스를 자유자재로 쓸 수 있도록 연습합시다. practice makes perfect!!! Dept. of Multimedia Engineering, DongEui Univ.(21)