Slide 1

Similar documents
PowerPoint Presentation

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

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

PowerPoint Presentation

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

설계란 무엇인가?

KNK_C_05_Pointers_Arrays_structures_summary_v02

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

Microsoft PowerPoint - Chapter 6.ppt

Slide 1

Slide 1

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

JAVA PROGRAMMING 실습 08.다형성

슬라이드 1

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

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - C++ 5 .pptx

Blog

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

C++ Programming

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

C++ Programming

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

C++ Programming

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

Microsoft PowerPoint - Chap12-OOP.ppt

기초컴퓨터프로그래밍

Slide 1

Microsoft PowerPoint 장강의노트.ppt

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

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

Slide 1

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

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

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

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

C++ Programming

Microsoft PowerPoint - chap06-5 [호환 모드]

02장.배열과 클래스

JVM 메모리구조

PowerPoint Template

쉽게 풀어쓴 C 프로그래밍

JAVA PROGRAMMING 실습 05. 객체의 활용

PowerPoint Template

C# Programming Guide - Types

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

JAVA PROGRAMMING 실습 02. 표준 입출력

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

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

슬라이드 1

10장. 구조체

PowerPoint Presentation

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

Microsoft PowerPoint - chap09-1.ppt

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]

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

Microsoft PowerPoint - chap09.ppt

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

Microsoft PowerPoint - Java7.pptx

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - chap06-1Array.ppt

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

PowerPoint Template

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

PowerPoint Presentation

11장 포인터

설계란 무엇인가?

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

Microsoft PowerPoint - java1 [호환 모드]

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - ch07 - 포인터 pm0415

1 장 C 언어복습 표준입출력배열포인터배열과포인터함수 const와포인터구조체컴파일러사용방법 C++ 프로그래밍입문

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

Microsoft PowerPoint - chap11-포인터의활용.pptx

쉽게 풀어쓴 C 프로그래밊

Microsoft PowerPoint - chap10-함수의활용.pptx

Microsoft PowerPoint - 2강

Slide 1

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

Microsoft PowerPoint - e pptx

ABC 9장

PowerPoint Presentation

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap03-변수와데이터형.pptx

2002년 2학기 자료구조

No Slide Title

제 1 강 희망의 땅, 알고리즘

gnu-lee-oop-kor-lec06-3-chap7

17장 클래스와 메소드

PowerPoint 프레젠테이션

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

Microsoft PowerPoint - Lect04.pptx

PowerPoint 프레젠테이션

(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public

Æí¶÷4-¼Ö·ç¼Çc03ÖÁ¾š

Microsoft PowerPoint - 03_(C_Programming)_(Korean)_Pointers

PowerPoint Presentation

Transcription:

SeoulTech 2011-2 nd 프로그래밍입문 (2) Chapter 6. 구조체와클래스 박종혁교수 (http://www.parkjonghyuk.net) Tel: 970-6702 Email: jhpark1@snut.ac.kr

Learning Objectives 구조체 구조체형 함수매개변수로서의구조체 구조체초기화 클래스 정의, 멤버함수 public 과 private 멤버 accessor 와 mutator 함수 구조체 vs. 클래스 6-2

구조체 두번째집합적자료형 : 구조체 집합의의미는 그룹화 배열 : 같은형의값의집합 구조체 : 다른형의값의집합 배열과같이하나의아이템으로취급한다 주요한차이점 : 구조체는먼저 정의 해야한다 다른변수들보다앞서서선언 6-3

구조체형 구조체는전역으로정의 ( 일반적 ) 메모리에할당되는것이아니다 공간확보자 (placeholder) 로서의역할 새로운형 ( 사용자정의형 ) 을생성하는것 정의 : struct CDAccountV1 새로운구조체형의이름 { }; double balance; double interestrate; int term; 멤버들의이름 6-4

구조체변수선언 구조체형을정의하고, 새로운형의변수를선언하는것 : CDAccountV1 account; 기본형의선언과동일하다 변수 account 는 CDAccountV1 형 멤버값 을가진다 구조체의각부분 6-5

구조체멤버접근 도트 (.) 연산자를이용하여멤버에접근 account.balance account.interestrate account.term 멤버변수 라고부름 구조체변수의부분 다른구조체는같은이름의멤버변수를가질수있다 충돌없음 6-6

디스플레이 6.1 구조체정의 (1 of 3) 6-7

디스플레이 6.1 구조체정의 (2 of 3) 6-8

디스플레이 6.1 구조체정의 (3 of 3) 6-9

구조체함정 구조체정의이후의세미콜론 (;) 세미콜론이반드시존재해야한다 : struct WeatherData { double temperature; double windvelocity; }; 세미콜론필요! 세미콜론전에구조체변수를선언할수있기때문에필요하다 6-10

구조체할당 CropYield 구조체 두개의구조체변수선언 : CropYield apples, oranges; 두변수모두 CropYield 구조체형 단순하게할당이가능하다 : apples = oranges; oranges 의멤버변수가 apples 의각각의멤버변수로단순하게복사된다 6-11

함수인자로서의구조체 기본형자료와비슷하게전달 Pass-by-value (Call-by-balue) Pass-by-reference (Call-by-reference) 또는복합적으로사용 함수에의해리턴될수도있다 리턴형은구조체형이된다 함수정의부내의리턴문은호출자에게구조체변수를전달한다 6-12

계층적구조체 ( 구조체멤버를가지는구조체 ) (1) 번구조체의태그가 (2) 번구조체의멤버로들어있다. 사용방법 PersonInfo person; person.birthday; person.birthday.year; struct Date (1) { Int month; int day; int year; }; struct PersonInfo (2) { double height; int weight; Date birthday; }; 6-13

구조체초기화 선언과동시에초기화가능 예 : struct Date { int month; int day; int year; }; Date duedate = {12, 31, 2003}; 선언에서세개의멤버변수모두에게초기화데이터를제공 6-14

구조체와유사 클래스 멤버변수뿐만아니라 멤버함수 가추가된다 OOP(object-oriented programming) 의핵심 객체에초점을맞춘다 객체 : 데이터와연산을모두포함한다 C++ 에서, 클래스형의변수가객체가된다 6-15

클래스정의 구조체의정의와비슷하다 예 : class DayOfYear 새로운클래스형의이름 { public: void output(); 멤버함수! int month; int day; }; 단지멤버함수의원형인것에주목! 함수의구현부는다른부분에위치한다 6-16

객체의선언 다른변수의선언과동일 사전정의형, 구조체형 예 : DayOfYear today, birthday; DayOfYear 형의두개의객체를선언 객체가포함하는것 : 데이터 ( 멤버변수 ) month, day 연산 ( 멤버함수 ) output() 6-17

클래스멤버접근 멤버들에는구조체와같은방법으로접근 예 : today.month today.day 멤버함수접근 : today.output(); 멤버함수의호출 6-18

클래스멤버함수 클래스멤버함수는반드시정의또는구현되어야한다 다른함수의정의와같다 main() 함수이후에정의가능 소속된클래스를반드시명시해야한다 : void DayOfYear::output() { } :: 는영역지정연산자 (scope resolution operator) 또는범위결정연산자 컴파일러에게함수가어떤클래스의멤버인지를알려준다 :: 이전의아이템을제한자라고한다 6-19

클래스멤버함수의정의 output() 멤버함수의정의에주목 ( 다음예제 ) 클래스멤버변수를사용 제한이없다 함수는클래스의모든객체에대하여사용된다 현재사용되는객체의데이터를참조 예 : today.output(); today 객체의데이터를출력한다 6-20

디스플레이 6.3 멤버함수를가지는클래스 (1 of 4) 6-21

디스플레이 6.3 멤버함수를가지는클래스 (2 of 4) 6-22

디스플레이 6.3 멤버함수를가지는클래스 (3 of 4) 6-23

디스플레이 6.3 멤버함수를가지는클래스 (4 of 4) 6-24

도트 (.) 와영역지정연산자 멤버가어디에속하는지지정하는데사용 도트 (.) 연산자 : 특정개체의멤버변수를지정 영역지정연산자 : 어떤클래스의멤버함수인지를지정 6-25

클래스의지위 클래스는모든것을갖춘형! int, double 등과같은하나의형 클래스형의변수를가질수있다 객체라고부른다 클래스형의매개변수를가질수있다 Pass-by-value (Call-by-value) Pass-by-reference (Call-by-reference) 다른형과같이클래스형을사용할수있다! 6-26

캡슐화 (Encapsulation) 다음을포함하는어떠한데이터형 데이터 ( 자료의범위 ) 연산 ( 데이터를조작할수있는 ) 예 : int 자료형은 : 데이터범위 : +-32,767 연산 : +,-,*,/,%,logical,etc. 클래스도동일하다 우리는데이터를명시하고, 연산은데이터의조작을허용한다! 6-27

추상데이터형 (Abstract Data Types) 추상 (Abstract) 프로그래머는세부사항을모른다 약어로 ADT 데이터와데이터의값을세팅하는연산의집합 ADT 는 언어에독립적이다 C++ 에서 ADT 는클래스를이용하여구현 C++ 클래스는 ADT 를정의 다른언어들또한 ADT 구현 6-28

캡슐화 캡슐화의확장 하나의단위로모든것을전달 클래스의선언 객체를가진다 객체는다음을캡슐화한다 데이터 ( 멤버변수 ) 자료의연산 ( 멤버함수 ) 6-29

OOP 의규칙 정보의은닉 클래스의사용자는연산이어떻게동작하는지에대한세부적인사항을알수없다 데이터의추상화 사용자는 ADT/ 클래스내에서데이터가어떻게취급되는지에대한세부사항을알지못한다 캡슐화 데이터와연산을함께제공하지만, 세부사항은숨겨짐 6-30

public 과 private 멤버 ( 접근제어자 ) 클래스내의데이터는대부분정의안에서 private 으로설계! OOP 규칙의유지 사용자로부터데이터 ( 멤버변수 ) 를숨긴다 연산을통해서만데이터의조작을허용 멤버함수를사용 public 아이템 ( 대체로멤버함수 ) 은사용자의접근이가능하다 6-31

public 과 private 예 (1/2) 이전의예를수정 : class DayOfYear { public: void input(); void output(); private: int month; int day; }; 데이터 ( 멤버변수 ) 는 private 객체는데이터를직접접근하지못한다 6-32

public 과 private 예 (2/2) 이전의예에서 객체의선언 : DayOfYear today; 객체 today 는 public 멤버에만접근이가능하다 cin >> today.month; // 허용되지않음! cout << today.day; // 허용되지않음! 대신 public 연산을호출해야한다 : today.input(); today.output(); 6-33

public 과 private 스타일 public & private 은혼용이가능 더욱일반적으로 public 이먼저위치한다 클래스를사용하는프로그래머에게편의를제공하기위함 private 데이터는사용자와무관하므로숨겨진다 클래스정의외부에서는 private 데이터의접근과수정이불가능하다 6-34

accessor 와 mutator 함수 객체는데이터를조작할수있는무엇인가가필요하다 accessor 멤버함수호출 객체가데이터를읽을수있도록허용 get 멤버함수 라고도한다 멤버변수의단순검색 mutator 멤버함수 객체가데이터를변경할수있도록허용 set 멤버함수 라고도한다 응용에기초한조작 6-35

인터페이스 (Interface ) 와 구현 (Implementation) 의분리 클래스의사용자는클래스의구현이어떻게되어있는지세부적으로알필요는없다 OOP 의규칙 캡슐화 (encapsulation) 사용자는단지 사용방법 이필요 클래스의인터페이스 (interface) 라고부른다 C++ public 멤버함수와그에연관된주석을지칭한다 클래스의구현은숨겨진다 멤버함수는다른부분에정의 사용자는볼수없다 6-36

구조체 vs. 클래스 구조체 일반적으로모든멤버는 public 멤버함수가없다 클래스 일반적으로모든데이터멤버는 private 인터페이스멤버함수는 public 기술적으로는같다 개념적으로는매우다른매커니즘 6-37

객체중심의사고 프로그래밍에대한초점 ( 패러다임 ) 의변화 이전 알고리즘이중심 OOP 객체 ( 데이터 ) 중심 알고리즘은여전히존재한다 단지자신의데이터에초점을준다 데이터를만들거나수정 소프트웨어솔루션의설계 다양한객체의정의와그것들이상호작용하는방법 6-38

요약 (1/2) 구조체는다른데이터형의집합 클래스는하나의단위 ( 객체 ) 에서데이터와함수를복합적으로사용한다 멤버변수와멤버함수 public 클래스외부에서접근가능 private 멤버함수의정의를통해서만접근가능 클래스와구조체형은함수의형식매개변수가될수있다 6-39

요약 (2/2) C++ 클래스의정의 두개의핵심부분으로구분한다 인터페이스 (Interface): 사용자가필요로하는부분 구현 (Implementation): 클래스의동작방법에대한세부적인부분 6-40

Q&A 1-41