Microsoft PowerPoint - additional03.ppt [호환 모드]

Similar documents
Microsoft PowerPoint - Chapter 6.ppt

PowerPoint Template

Microsoft PowerPoint - additional06.ppt [호환 모드]

Microsoft PowerPoint - additional01.ppt [호환 모드]

PowerPoint Template

C++ Programming

설계란 무엇인가?

Microsoft PowerPoint - additional07.ppt [호환 모드]

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

C++ Programming

PowerPoint Presentation

Microsoft PowerPoint - additional08.ppt [호환 모드]

C++ Programming

PowerPoint Presentation

4 장클래스와객체 클래스와객체 public과 private 구조체와클래스객체의생성과생성자객체의소멸과소멸자생성자와소멸자의호출순서디폴트생성자와디폴트소멸자멤버초기화멤버함수의외부정의멤버함수의인라인함수선언 C++ 프로그래밍입문

Microsoft PowerPoint - Chapter 1-rev

PowerPoint Template

윤성우의 열혈 TCP/IP 소켓 프로그래밍

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

슬라이드 1

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

C++ Programming

Microsoft PowerPoint - C++ 5 .pptx

윤성우의 열혈 TCP/IP 소켓 프로그래밍

쉽게 풀어쓴 C 프로그래밍

Blog

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - [2009] 02.pptx

Microsoft PowerPoint - Chap12-OOP.ppt

유니티 변수-함수.key

PowerPoint 프레젠테이션

Microsoft PowerPoint - Chapter 10.ppt

(Microsoft PowerPoint - 07\300\345.ppt [\310\243\310\257 \270\360\265\345])

윤성우의 열혈 TCP/IP 소켓 프로그래밍

1. 클래스와배열 int 형배열선언및초기화 int ary[5] = 1, 2, 3, 4, 5 ; for (int i = 0; i < 5; i++) cout << "ary[" << i << "] = " << ary[i] << endl; 5 장클래스의활용 1

1. 상속의기본개념 다음과같은문제를위한클래스설계 자동차 속성 : 색상, 배기량, 현재속도 메서드 : 가속하라, 멈춰라, 시동을켜라 트럭 속성 : 색상, 배기량, 현재속도, 최대중량 메서드 : 가속하라, 멈춰라, 시동을켜라 택시 속성 : 색상, 배기량, 현재속도, 요금,

Slide 1

(Microsoft Word - \301\337\260\243\260\355\273\347.docx)

쉽게 풀어쓴 C 프로그래밍

프입2-강의노트-const-friend-static

구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을

윤성우의 열혈 TCP/IP 소켓 프로그래밍

금오공대 컴퓨터공학전공 강의자료

PowerPoint Presentation

Microsoft PowerPoint - Chapter 4-rev

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

JAVA PROGRAMMING 실습 08.다형성

쉽게 풀어쓴 C 프로그래밍

슬라이드 1

17장 클래스와 메소드

Microsoft PowerPoint - 8ÀÏ°_Æ÷ÀÎÅÍ.ppt

Slide 1

Slide 1

JAVA PROGRAMMING 실습 05. 객체의 활용

제 1 장 기본 개념

chap10.PDF

윤성우의 열혈 TCP/IP 소켓 프로그래밍

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

윤성우의 열혈 TCP/IP 소켓 프로그래밍

<432B2BC7C1B7CEB1D7B7A1B9D628BABBB9AE5FC3D6C1BE295B315D2E687770>

PowerPoint Presentation

설계란 무엇인가?

Microsoft PowerPoint - java1 [호환 모드]

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

쉽게 풀어쓴 C 프로그래밊

PowerPoint Presentation

Microsoft PowerPoint 장강의노트.ppt

1. 기본형의형변환복습 C/C++ 형변환의종류 자동형변환 ( 묵시적형변환 ) 강제형변환 ( 명시적형변환 ) 기본형의자동형변환의예 1. 배열 to 포인터변환 배열명은해당배열의첫번째원소의 주소로변환됨 int ary[10]; int *pary = ary; 2. 함수 to 포

프입2-강의노트-C++기초

Programming hwp

PowerPoint Template

Microsoft PowerPoint - Lect04.pptx

Microsoft PowerPoint - 02-Class Review.pptx

C 프로그래밊 개요

Chapter #01 Subject

JAVA PROGRAMMING 실습 02. 표준 입출력

Microsoft PowerPoint - 9ÀÏ°_ÂüÁ¶ÀÚ.ppt

No Slide Title

(Microsoft PowerPoint - 11\300\345.ppt [\310\243\310\257 \270\360\265\345])

Microsoft PowerPoint - additional-11_13l.ppt [호환 모드]

1. 표준입출력 C++ : C의모든라이브러리를포함 printf, scanf 함수사용가능예 : int, double, 문자열값을입력받고출력하기 #include <cstdio> int ivar; double dvar; char str[20]; printf("int, dou

Microsoft PowerPoint - 05장(함수) [호환 모드]

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap01-C언어개요.pptx

Slide 1

Microsoft PowerPoint - chap06-2pointer.ppt

프입2-강의노트-C++배경

PowerPoint Presentation

제4장 기본 의미구조 (Basic Semantics)

1. 인라인함수 예 : x, y 값중최소값을반환하는매크로와함수작성 // 매크로로구현한경우 #define MIN(X, Y) ((X) < (Y)? (X) : (Y)) X, Y 각각을괄호 ( ) 안에넣는이유는? // 함수로구현한경우 cout << MIN(4, 5) << en

Microsoft PowerPoint - 2강

K&R2 Reference Manual 번역본

설계란 무엇인가?

PowerPoint Presentation

Microsoft PowerPoint - CSharp-10-예외처리

KNK_C_05_Pointers_Arrays_structures_summary_v02

설계란 무엇인가?

adfasdfasfdasfasfadf

Transcription:

3. 클래스의기본 객체지향프로그래밍소개 구조체와클래스 클래스의정의 Jong Hyuk Park

객체지향프로그래밍소개 Jong Hyuk Park

구조적프로그래밍개념 기존 C와같은구조적프로그래밍언어는동작되는자료와처리동작자체를서로별도로구분 처리동작과자료사이의관계가서로밀접한연관성을갖지못함 프로그램이커지거나복잡해지면프로그램이혼란스럽게되어에러를찾는디버깅및프로그램의유지보수가어려워짐 자동차, 책, 사과, 물건, 배 소유하다타다먹다읽다맛있다 3

객체 (object) 개념 (1) 객체지향프로그래밍에서는자료와이의처리동작을하나로묶어서다룰수있는객체 (object) 라는개념을도입 프로그램은처리하는절차보다도동작되는자료에중점을둔객체, 객체간의상호관계로표현 물건자동차사과책배 소유하다 타다 먹다 읽다 맛있다 4

객체 (object) 개념 (2) 물건의객체는다른객체보다상위관계를갖는객체이고이객체에서갖는성질은다른객체도공유 비슷한성질의사과, 배는서로성질을공유하는관계 물건 소유하다 자동차책사과배 타다 읽다 먹다 맛있다 5

객체지향프로그래밍 (1) 객체지향프로그래밍시각 문제의영역을단순한자료의처리흐름으로보지않음 구조적프로그래밍서로관련된자료와연산 ( 함수 ) 들이서로독립적으로정의되어취급 문제영역내에존재하는여러연관된객체들을정의하고이들객체들이서로정보를주고받는다고보는시각 ( 객체간의관계 ) 객체지향프로그래밍에서는프로그램은여러개의객체로구성 객체 (object) 는자료 ( 특성 (attribute)) 와이를대상으로처리하는동작인연산 ( 함수, 메쏘드 (method)) 을하나로묶어만든요소로프로그램을구성하는실체 객체란단순히자료를표현하는변수만을가지는것이아니라그객체가무엇을할수있는가를정의한함수 ( 메쏘드 ) 로구성 6

객체지향프로그래밍 (2) 구조적프로그래밍 자료 + 연산 ( 함수 ) = 프로그램 객체지향프로그래밍 자료 + 연산 ( 함수 ) = 객체자료연산 ( 함수 ) 객체 + 객체 = 프로그램 7

구조체와클래스 Jong Hyuk Park

구조체 구조체의유용성 관련있는데이터를하나의자료형으로그룹화 따라서, 프로그램의구현및관리가용이 함께움직이는데이터들을묶어주는효과 9

구조체와클래스 C 언어의구조체에대한불만 모든사용자정의자료형에대한불만 기본자료형으로인식해주지않는다. struct Person{ int age; char name[10]; ; int main() { int a=10; Person p; C++ 의철학과맞물리면? // C 에서는안됨 struct Person p; return 0; 10

구조체 + 함수 함수를넣으면좋은구조체 프로그램 = 데이터 + 데이터조작루틴 ( 함수 ) 잘구성된프로그램은데이터와더불어함수들도그룹화 객체지향프로그래밍기법 11

구조체 + 함수예 (1) 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 t &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 t money){ balance-=money; ; 12

구조체 + 함수예 (2) 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; 13

클래스 (1) 객체지향프로그래밍에서는구조체가아니라클래스 (class) 클래스 = 멤버변수 + 멤버함수 변수가아니라객체 (object) 14

데이터추상화와클래스 사물의관찰이후의데이터추상화 현실세계의사물을데이터적인측면과기능적인측면을통해서정의하는것 데이터추상화이후의클래스화 추상화된데이터를가지고사용자정의자료형을정의하는 것 15

객체생성 선언된클래스를사용하여객체를생성 클래스화이후의인스턴스화 (instantiation) 16

클래스의정의 Jong Hyuk Park

클래스멤버의접근제어 클래스의내부접근과외부접근 class Counter { public: int val; void Increment(void) { val++; ; // 내부접근 18 int main(void) { Counter cnt; cnt.val=0; // 외부접근 cnt.increment(); // 외부접근 cout<<cnt.val<<endl; // 외부접근 return 0;

클래스멤버의접근제어 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; 19

클래스선언형식 C++ 언어에서클래스의정의는 C 언어의구조체 (struct) 선언과비슷 다른점은클래스의멤버로서자료뿐만아니라연산을위한함수도포함된다는점 class 클래스명 { class Test { [private:] private: 자료선언 ; 함수선언 ; int a; void inc(); public: public: 자료선언 ; char s[10]; 함수선언 ; var; [ 객체변수 ]; 클래스명객체변수, ; Test t1, t2; 20

클래스영역 (1) 클래스를정의할때 private 과 public 영역으로구분 private 은전용부분 private 영역에서정의된자료형이나함수는오직해당객체내부의멤버함수만이사용 외부에대해자료의정보가은폐 전용부분에는함부로변경되어서는안될자료와객체외부에서호출되어서는안될멤버함수를정의 디폴트 private 선엄임 (vs. stracut에서는디폴트 public 접근임 ) public 은공용부분 객체외부에서사용될수있는자료나함수가정의 클래스정의시키워드 private이생략되면 public 키워드가나올때까지의부분을전용멤버로간주 클래스영역으로는위두영역외에 protected로구분되는보호부분 ( 이후다시소개 ) 21

클래스영역 (2) 전용부분공용부분외부함수 자료 함수 자료 함수 외부함수공용부분 자료, 함수사용가능 객체외부로부터전용부분자료은폐 객체내부멤버함수의 전용부분자료사용가능 객체외부와인터페이스 22

클래스멤버함수의선언 클래스의멤버로서자료뿐만아니라함수도정의 함수의본체내용은직접클래스내부나또는클래스외부에서기술 클래스내부에서함수의본체가기술된멤버함수는모두인라인함수 (inline function) 로정의 class 클래스명 { 자료형함수명 ( 인수선언 ) { 함수본체 23

클래스사용예 (1) #include <iostream> using std::cout; using std::endl; 24 class Test { char c; public: int x; float y; void set_c(char a) { c = a; // set_c() 멤버함수정의 char get_c() { return c; // get_c() 멤버함수정의 ; int main(void) { Test o; // 클래스 Test 형의객체 o 선언 o.x = 12; o.y = 314 3.14; o.set_c('h'); // set_c() 멤버함수호출 cout << o.x << ", " << o.y << endl; cout << o.get_c() << endl; return 0; 12, 3.14 H 전용부분자료 c 의접근은클래스내부의멤버함수 set_c(), get_c() 에서만허용되고클래스외부에서는이들공용부분멤버함수의호출에의해서간접적으로접근된다.

클래스사용예 (2) #include <iostream> using std::cout; using std::endl; class Counter { int value; public: void set(int n) { value = n; void inc() { ++value; void dec() { --value; int val() { return value; ; int main(void) { Counter cnt1, cnt2; cnt1.set(10); cnt1.inc(); cout << "cnt1 value : " << cnt1.val() << endl; cnt2.set(0); cnt2.dec(); cout << "cnt2 value : " << cnt2.val() << endl; cnt1 value : 11 cnt2 value : -1 클래스 Counter를사용하여서로독립된객체cnt1, cnt2가선언되어서로독립적으로수행 25 return 0;

클래스멤버함수의외부정의 함수의본체가긴경우에클래스의멤버함수를클래스내부가아닌클래스외부에서정의하는것이편리 class 클래스명 { 자료형함수명 ( 인수선언 ); [inline] 자료형클래스명 :: 함수명 ( 인수선언 ) { 함수본체 26

클래스멤버함수의외부정의 class Door{ private: int state; public: void Open(); void Close(); void ShowState(); ; 27 void Door::Open(){ state=open; void Door::Close(){ state=close; COS void Door::ShowState(){ 생략

클래스멤버함수의외부정의 멤버함수의인 - 라인화 내부선언시 inline 화의미를지님 28 const int OPEN=1; const int CLOSE=2; class Door{ private: int state; public: void Open(){ state=open; void Close(){ state=close; void ShowState() { 생략 ; * 참고 ) In line 화는 C 에서의 #define 과같이메크로같은기능 컴파일러가최적화여부결정함 equal! 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(){ 생략

클래스멤버함수의외부정의 헤더파일을이용한파일의분할 29

클래스사용예 (3) #include <iostream> using std::cout; using std::endl; main() { Square a; class Square { int side; public: void set(int); int area(); ; inline void Square::set(int t x) { side = x; int Square::area() { return side*side; 30 a.set(12); cout << "area : " << a.area() << endl; 출력결과

클래스사용예 (3) #include <iostream> using std::cout; using std::endl; main() { Square a; class Square { int side; public: void set(int); int area(); ; inline void Square::set(int t x) { side = x; int Square::area() { return side*side; 31 a.set(12); cout << "area : " << a.area() << endl; area : 144 클래스외부에정의되는멤버함수를확장함수로선언하고자할때에는 inline 키워드를명시해야한다.

Jong Hyuk Park