3장. 클래스의 기본
3-1 구조체와 클래스 구조체의 유용성 관련 있는 데이터를 하나의 자료형으로 묶을 수 있다. 3-1 구조체와 클래스 구조체의 유용성 관련 있는 데이터를 하나의 자료형으로 묶을 수 있다. 따라서, 프로그램의 구현 및 관리가 용이해진다. 함께 움직이는 데이터들을 묶어주는 효과! 그림 3-1
3-1 구조체와 클래스 C 언어의 구조체에 대한 불만 모든 사용자 정의 자료형에 대한 불만 3-1 구조체와 클래스 C 언어의 구조체에 대한 불만 모든 사용자 정의 자료형에 대한 불만 기본 자료형으로 인식해 주지 않는다. struct Person{ int age; char name[10]; }; int main() { int a=10; Person p; // struct Person p; return 0; } C++의 철학과 맞물리면?
3-1 구조체와 클래스 함수를 넣으면 좋은 구조체 프로그램=데이터+데이터 조작 루틴(함수) 3-1 구조체와 클래스 함수를 넣으면 좋은 구조체 프로그램=데이터+데이터 조작 루틴(함수) 잘 구성된 프로그램은 데이터와 더불어 함수들도 부류를 형성 oo1.cpp, oo2.cpp, oo3.cpp 그림 3-4
3-1 구조체와 클래스 oo2.cpp와 oo3.cpp의 비교 struct Account { struct Account { 3-1 구조체와 클래스 oo2.cpp와 oo3.cpp의 비교 struct Account { char accID[20]; char secID[20]; char name[20]; int balance; }; void Deposit(Account &acc, int money) { acc.balance+=money; } void Withdraw(Account &acc, int money) acc.balance-=money; struct Account { char accID[20]; char secID[20]; char name[20]; int balance; void Deposit(int money){ balance+=money; } void Withdraw(int money){ balance-=money; };
3-1 구조체와 클래스 그림 3-5 struct Account { char accID[20]; char secID[20]; 3-1 구조체와 클래스 struct Account { char accID[20]; char secID[20]; char name[20]; int balance; void Deposit(int money){ balance+=money; } void Withdraw(int money){ balance-=money; }; int main(void) { Account yoon={"1234", "2321", "yoon", 1000}; yoon.Deposit(100); cout<<"잔 액 : "<<yoon.balance<<endl; return 0; } 그림 3-5
3-1 구조체와 클래스 구조체가 아니라 클래스(Class) 클래스 = 멤버 변수 + 멤버 함수 3-1 구조체와 클래스 구조체가 아니라 클래스(Class) 클래스 = 멤버 변수 + 멤버 함수 변수가 아니라 객체(Object: 완전한 대상체) oo4.cpp 그림 3-6
3-2 클래스와 객체 사물의 관찰 이후의 데이터 추상화 3-2 클래스와 객체 사물의 관찰 이후의 데이터 추상화 현실 세계의 사물을 데이터적인 측면과 기능적인 측면을 통해서 정의하는 것 특징 1. 발이 네 개 특징 2. 코의 길이가 5미터 내외 특징 3. 몸무게는 1톤 이상 특징 4. 코를 이용해서 목욕을 함 특징 5. 코를 이용해서 물건을 집기도 함
3-2 클래스와 객체 데이터 추상화 이후의 클래스화 추상화된 데이터를 가지고 사용자 정의 자료형을 정의하는 것 그림 3-7 3-2 클래스와 객체 데이터 추상화 이후의 클래스화 추상화된 데이터를 가지고 사용자 정의 자료형을 정의하는 것 그림 3-7 그림 3-8
3-2 클래스와 객체 클래스화 이후의 인스턴스화 클래스 기반의 객체(Object) 생성 그림 3-9
3-3 클래스 멤버의 접근 제어 클래스의 내부 접근과 외부 접근 class Counter { public: int val; 3-3 클래스 멤버의 접근 제어 클래스의 내부 접근과 외부 접근 class Counter { public: int val; void Increment(void) { val++; //내부 접근 } }; int main(void) Counter cnt; cnt.val=0; //외부 접근 cnt.Increment(); //외부 접근 cout<<cnt.val<<endl; //외부 접근 return 0;
3-3 클래스 멤버의 접근 제어 그림 3-10 const int OPEN=1; const int CLOSE=2; 3-3 클래스 멤버의 접근 제어 const int OPEN=1; const int CLOSE=2; class Door{ private: int state; public: void Open(){ state=OPEN; } void Close(){ state=CLOSE; } void ShowState(){ …생략… } }; int main() { Door d; //d.state=OPEN; d.Open(); d.ShowState(); return 0; } 그림 3-10
3-4 멤버 함수의 외부 정의 그림 3-11 class Door{ private: int state; public: 3-4 멤버 함수의 외부 정의 class Door{ private: int state; public: void Open(); void Close(); void ShowState(); }; void Door::Open(){ state=OPEN; } void Door::Close(){ state=CLOSE; void Door::ShowState(){ … 생 략 … 그림 3-11
3-4 멤버 함수의 외부 정의 멤버 함수의 인-라인화 equal! inline void Door::Open(){ 3-4 멤버 함수의 외부 정의 멤버 함수의 인-라인화 const int OPEN=1; const int CLOSE=2; class Door{ private: int state; public: void Open(){ state=OPEN; } void Close(){ state=CLOSE; void ShowState() { …생략… }; class Door{ private: int state; public: void Open(); void Close(); void ShowState(); }; inline void Door::Open(){ state=OPEN; } inline void Door::Close(){ state=CLOSE; inline void Door::ShowState(){ … 생 략 … equal!
3-4 멤버 함수의 외부 정의 헤더 파일을 이용한 파일의 분할 그림 3-12