+ All Categories
Home > Documents > chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... ·...

chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... ·...

Date post: 07-Aug-2020
Category:
Upload: others
View: 0 times
Download: 0 times
Share this document with a friend
50
SeoulTech 2010-2 nd 프로그래밍입문 2 9객체와 클래스 9객체와 클래스 박종 종혁 혁 교수 교수 UCS Lab UCS Lab (http://www.parkjonghyuk.net) Tel: 02-970-6702 Email: [email protected] C++로 시작하는 객체지향 프로그래밍
Transcript
Page 1: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

SeoulTech 2010-2nd 프로그래밍입문 2

9장 객체와 클래스9장 객체와 클래스

박박 종종 혁혁 교수교수

UCS LabUCS Lab(http://www.parkjonghyuk.net)

Tel: 02-970-6702

Email: [email protected]

C++로 시작하는 객체지향 프로그래밍

Page 2: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

목 차객체와 클래스의 이해 객체를 모델링하기 위한 클래스의 사용(9 2)객체와 클래스의 이해, 객체를 모델링하기 위한 클래스의 사용(9.2)

클래스와 객체를 기술하기 위한 UML 그래픽 기호법의 사용(9.2)

객체를 작성할 때 생성자의 역할에 대한 이해(9 3)객체를 작성할 때 생성자의 역할에 대한 이해(9.3)

클래스를 선언하는 방법과 클래스의 객체를 생성하는 방법(9.4)

클래스 선언과 클래스 구현을 분리하는 방법(9.5)

포인터를 사용하여 객체 멤버로 접근(9.6)

힙에서 new 연산자를 사용하여 객체 생성(9.7)

C++ t i 클래스를 사용하여 문자열 처리(9 8)C++ string 클래스를 사용하여 문자열 처리(9.8)

클래스를 유지하기 쉽도록 데이터 필드 캡슐화를 위해 적당한 get과 set 함수(function)로 private 데이터 필드 선언(9.9)

데이터 필드의 범위 이해(9.10)

this 포인터를 사용하여 숨겨진 데이터 필드 참조(9.11)

객체 인수 가진 함수 작성( )객체 인수를 가진 함수 작성(9.12)

배열에서의 객체 처리와 저장(9.13)

소프트웨어를 개발하기 위한 클래스 추상화의 적용(9 14-9 15)

C++로 시작하는 객체지향 프로그래밍 2

소프트웨어를 개발하기 위한 클래스 추상화의 적용(9.14 9.15)

생성자의 초기화 목록을 사용하여 데이터 필드 초기화(9.16)

Page 3: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

객체지향 프로그래밍의 개념• 객체지향 프로그래밍(OOP)에서는 객체를 사용한프로그래밍이 필요하다프로그래밍이 필요하다. - 객체는 명확히 확인이 가능한 실제 세계에서의 존재물을대표하는 것예) 학생, 책상, 원, 버튼, 대여(물건을 빌리는 것)조차도 모두객체로 볼 수 있다.

객체는 자신만의 특성과 상태( t t ) 행동(b h i )을- 객체는 자신만의 특성과 상태(state), 행동(behavior)을갖는다.

객체의 상태(state)객체의 상태(state)현재 값을 가지고 있는 데이터 필드(또는 속성) 에 의해 표현객체의 행동(behavior)( )일련의 함수에 의해 정의객체에 대한 함수를 호출하는 것은 객체에게 어떤 일을

수행하도록 요구하는 것이다

C++로 시작하는 객체지향 프로그래밍 3

수행하도록 요구하는 것이다.

Page 4: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

객체

클래스 이름: Circle 데이터필드

클래스 템플릿

데이터필드:radius is _______

메소드:

getArea

getArea

Circle 객체1 Circle 객체 2 Circle 객체 3 Circle 클래스의 세 가지 객체

데이터 필드:

radius 는 10

데이터 필드:

radius 는 25

데이터 필드:

radius 는 125

•객체는 상태(state)와 행동(behavior) 모두를가진다가진다. -상태는 객체를 정의하고, 행동은 객체가 무엇을 할

C++로 시작하는 객체지향 프로그래밍 4

것인지를 정의한다.

Page 5: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

클래스

•클래스(class)는 같은 유형의 객체를 정의하는클래스(class)는 같은 유형의 객체를 정의하는생성자(constructor)이다.

•클래스는

데이터 필드를 정의하기 위해 변수를 사용-데이터 필드를 정의하기 위해 변수를 사용

-행동을 정의하기 위해 함수를 사용

•클래스는 생성자라고 하는 특별한 유형의함수도 제공하는데, 생성자는 클래스에서객체를 생성할 때 호출된다.

C++로 시작하는 객체지향 프로그래밍 5

Page 6: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

클래스class Circle { public: // 원의 반지름// 원의 반지름

double radius; // circle 객체의 생성 Ci l ()

데이터 필드

Circle() { radius = 1; } 생성자

// circle 객체의 생성

Circle(double newRadius) {

di R di radius = newRadius; } // 원의 면적 값 반환 d bl tA () double getArea()

{ return radius * radius * 3.14159; } }

함수

C++로 시작하는 객체지향 프로그래밍 6

};

Page 7: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

UML 클래스 다이어그램UML 클래스 다이어그램 Circle 클래스이름클래 다이어 램 Circle

radius: double Circle()

클래스이름

데이터 필드

생성자와함수

UML 클래스 다이어그램

()Circle(newRadius: double)

getArea(): double

생성자와함수

circle1: Circle radius: 10

circle2: Circle radius: 25

circle3: Circle radius: 125

객체에 대한

UML 표기법

C++로 시작하는 객체지향 프로그래밍 7

Page 8: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

생성자생성자생성자(constructor)의 이름은 클래스 이름과 같으며, 다른 특징

들을 갖는 여러 개의 생성자를 사용하여 오버로딩( l di )될들을 갖는 여러 개의 생성자를 사용하여 오버로딩(overloading)될수 있는데, 이는 다른 초기 데이터 값을 갖는 객체 구성을 쉽게 해준다.준다.

클래스는 일반적으로 Circle()이라는 이름의 생성자와 같이 인수가 없는 생성자를 제공한다. 이와 같이 비어있는 본체(body)를가지는 인수 없는 생성자(no-arg constructor)는 반드시 클래스 내부에 선언되어야 하는데, 이러한 생성자를 기본 생성자(default constructor)라고 하며 클래스 안에서 어떠한 생성자도 선언하지constructor)라고 하며, 클래스 안에서 어떠한 생성자도 선언하지않을 경우에만 자동적으로 주어진다.

C++로 시작하는 객체지향 프로그래밍 8

Page 9: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

생성자(계속)생성자(계속)

어떠한 매개변수도 가지고 있지 않은 생성자를인수 없는 생성자(no-arg constructor)라고 한다.

생성자는 클래스 자신과 같은 이름을 가져야한다.

생성자는 반환값 유형(return type)을 가지지생성자 유형( yp ) 가지지않는다(void도 사용할 수 없다.).

생성자는 객체를 초기화하는 역할을 수행한생성자는 객체를 초기화하는 역할을 수행한다.

C++로 시작하는 객체지향 프로그래밍 9

Page 10: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

객체 이름객체 이름

C++에서 객체를 생성할 때 이름을 할당할 수C 에서 객체를 생성할 때 이름을 할당할 수있다. 생성자는 객체가 생성될 때 호출된다. 인수 없는 생성자를 사용하여 객체를인수 없는 생성자를 사용하여 객체를생성하기 위한 구문은

ClassName variableName;

이다. 예를 들어,

Circle circle1;

C++로 시작하는 객체지향 프로그래밍 10

Page 11: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

인수가 있는 생성자인수가 있는 생성자

인수가 있는 생성자를 사용하여 객체를 선언하기 위한 구문은

ClassName variableName(인수);

이다. 예를 들어, 다음 선언은 5.5의 반지름 값을 갖는Circle 클래스의 생성자를 호출함으로써 circle2라는 이름의 객체를 생성한다.

Circle circle2(5.5);

C++로 시작하는 객체지향 프로그래밍 11

Page 12: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

접근 연산자접근 연산자

객체가 생성된 후에 객체 멤버 접근 연산자로객체가 생성된 후에 객체 멤버 접근 연산자로알려진 점 연산자(.)를 사용하여 데이터에접근하고 함수를 호출할 수 있다:접근하고 함수를 호출할 수 있다:

객체에서 데이터objectName.dataField는 객체에서 데이터필드를 참조한다.

objectName function(인수)는 객체에 대한objectName.function(인수)는 객체에 대한함수를 호출한다.

C++로 시작하는 객체지향 프로그래밍 12

.

Page 13: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

간단한 l 클래스간단한 Circle 클래스

목적 : 객체 선언 데이터 접근 함수목적 : 객체 선언, 데이터 접근, 함수사용에 관한 설명

TestCircle Run

C++로 시작하는 객체지향 프로그래밍 13

Page 14: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

객체와 클래스 이름 지정객체와 클래스 이름 지정

클래스를 선언할 때 관습적으로클래스를 선언할 때 관습적으로클래스 이름의 첫 문자를 대문자로한다. 예를 들어, 클래스는 Circle, Rectangle Desk 등과 같이 이름을Rectangle, Desk 등과 같이 이름을짓는다. C++ 라이브러리에서 클래스이름은 소문자이다 객체는 변수에서와이름은 소문자이다. 객체는 변수에서와같은 방법으로 이름을 지으면 된다.같은 방법으로 이름을 지으면 된다.

C++로 시작하는 객체지향 프로그래밍 14

Page 15: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

클래스는 하나의 유형클래스는 하나의 유형

변수를 선언하기 위해 원시 데이터변수를 선언하기 위해 원시 데이터유형을 사용할 수 있다. 또한 객체이름을 선언하기 위해 클래스 이름을사용할 수 있다 이런 의미에서사용할 수 있다. 이런 의미에서클래스도 데이터 유형이라고 할 수있다있다.

C++로 시작하는 객체지향 프로그래밍 15

Page 16: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

멤버간의 복사멤버간의 복사

C++에서 하나의 객체로부터 다른 객체로 내용을C++에서 하나의 객체로부터 다른 객체로 내용을복사하기 위해 대입 연산자 =를 사용할 수 있다. 기본적으로 한 객체의 각 데이터 필드는 다른기본적으로 한 객체의 각 데이터 필드는 다른객체의 대응 부분으로 복사된다. 예를 들어,

circle2 = circle1;

위는 circle1의 radius를 circle2로 복사한다. 복사후에도 circle1과 circle2는 여전히 두 개의 다른객체이다. 하지만 같은 radius를 갖고 있게 된다.

C++로 시작하는 객체지향 프로그래밍 16

Page 17: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

상수 객체 이름상수 객체 이름

객체 이름은 배열 이름과 같다 일단 객체객체 이름은 배열 이름과 같다. 일단 객체이름이 선언되면 그 이름은 객체를 의미하게된다 다른 객체를 나타내기 위해 다시 할당할된다. 다른 객체를 나타내기 위해 다시 할당할수는 없다. 이런 의미로 비록 객체의 내용이변할 수 있지만 객체 이름은 상수라고 할 수있다.있다

C++로 시작하는 객체지향 프로그래밍 17

Page 18: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

익명 객체대부분 이름이 주어진 객체를 생성하고 그 후에

객체의 이름을 사용하여 객체의 멤버에 접근한다객체의 이름을 사용하여 객체의 멤버에 접근한다. 종종 객체를 생성하고 단지 한 번만 객체를 사용하는경우가 있다 이와 같은 경우는 객체에 이름을 줄경우가 있다. 이와 같은 경우는 객체에 이름을 줄필요가 없다. 그러한 객체를 익명 객체(anonymous object)라고 한다object)라고 한다.

인수 없는 생성자를 사용하여 익명 객체를생성하기 위한 구문은생성하기 위한 구문은

ClassName()

이다 인수가 있는 생성자를 사용하여 익명 객체를이다. 인수가 있는 생성자를 사용하여 익명 객체를생성하는 구문은 다음과 같다.

C++로 시작하는 객체지향 프로그래밍 18

ClassName(인수)

Page 19: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

클래스가 struct를 대체

C 언어는 레코드(record)를 나타내기 위해 struct유형을 가지고 있다. 예를 들어, 학생을 나타내기위해 struct 유형을 (a)에서와 같이 정의한다

struct Student

{

class Student

{{

int id;

char firstName[30];

{

public:

int id;

char mi;

char lastName[30];

};

char firstName[30];

char mi;

char lastName[30];};

(a)

char lastName[30];

};

(b)

C++로 시작하는 객체지향 프로그래밍 19

Page 20: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

클래스 선언과 구현 분리클래스 선언과 구현 분리C++에서는 클래스 선언과 구현이 분리되도록 할

수 있다 클래스 선언은 클래스의 약 사항을수 있다. 클래스 선언은 클래스의 규약 사항을기술하는 것이고 클래스 구현은 그 규약을 실현하는것이라고 볼 수 있다 클래스 선언은 단순히 모든것이라고 볼 수 있다. 클래스 선언은 단순히 모든데이터 필드와 생성자 원형(prototype), 함수 원형을목록으로 만드는 것이다 클래스 구현에서는목록으로 만드는 것이다. 클래스 구현에서는생성자와 함수도 정의된다. 클래스 선언과 구현은 두개의 분리된 파일로 저장할 수 있다 두 파일의개의 분리된 파일로 저장할 수 있다. 두 파일의이름은 같지만 다른 확장자(extension)를 갖는데, 즉클래스 선언 파일의 확장자는 h이고 클래스 구현클래스 선언 파일의 확장자는 .h이고, 클래스 구현파일의 확장자는 .cpp이다.

C++로 시작하는 객체지향 프로그래밍 20

Circle.h RunCircle.cpp

Page 21: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

인라인 선언인라인 선언

5 16절 “인라인 함수”에서 인라인(inline)5.16절 인라인 함수 에서 인라인(inline) 함수를 사용하여 함수의 효율성을개선하 방법에 대해서 설명하였다개선하는 방법에 대해서 설명하였다. 인라인 함수는 클래스 선언에서 중요한라 수 클래 에서 중역할을 한다. 함수가 클래스 선언 안에서구현될 때 자동적으로 인라인 함수가구현될 때 자동적으로 인라인 함수가된다. 이를 인라인 선언이라고 한다.

C++로 시작하는 객체지향 프로그래밍 21

Page 22: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

인라인 선언 예class A{인라인 선언 예 {public:

예를 들어, 클래스A에 대한 우측 선언에서

A(){

A에 대한 우측 선언에서생성자와 함수 f1은자동적으로 인라인

// 어떤 작업 수행;}

자동적으로 인라인함수가 되지만 함수 f2는

double f1(){

일반 함수가 된다. // 값 변환

}

double f2();

C++로 시작하는 객체지향 프로그래밍 22

};

Page 23: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

구현 파일에서 인라인 함수구현 파일에서 인라인 함수

클래스에 대한 인라인 함수를 선언하는 다른방법이 있다. 클래스 구현 파일에서 인라인 함수를선언할 수 있다. 예를 들어, 인라인 함수로 함수,f2를 선언하기 위해서는 다음과 같이 함수 헤더파일에서 앞쪽에 인라인 키워드를 쓰면 된다.

// 함수를 인라인으로 구현

inline double A::f2(){{// 값 변환

}C++로 시작하는 객체지향 프로그래밍 23

}

Page 24: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

인라인 선언?인라인 선언?

5.16 절 에 서 얘 기 한 바 와 같 이 긴5.16 절 에 서 얘 기 한 바 와 같 이 긴함수보다는 짧은 함수를 인라인 함수로 하는것이 좋다것이 좋다.

C++로 시작하는 객체지향 프로그래밍 24

Page 25: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

포인터를 사용한 객체 멤버 접근

객체 이름은 일단 선언되면 변경할 수 없다. 그러나 객체에 대한 포인터( i )는 생성그러나 객체에 대한 포인터(pointer)는 생성가능하고, 필요할 때마다 포인터로 객체의주소를 할당할 수도 있다. 다음은 그 예이다.

Circle circle1;Circle circle1;

Circle *pCircle = &circle1;

cout << "The radius is " << (*pCircle) radius << endl;cout << The radius is << (*pCircle).radius << endl;

cout << "The area is " << (*pCircle).getArea() << endl;

(*pCircle) radius = 5 5;(*pCircle).radius = 5.5;

cout << "The radius is " << (*pCircle).radius << endl;

t << "Th i " << (* Ci l ) tA () << dl;

C++로 시작하는 객체지향 프로그래밍 25

cout << "The area is " << (*pCircle).getArea() << endl;

Page 26: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

힙에서 동적 객체 생성

함수에서 원(circle) 객체를 선언할 때, 그객체는 스택( k) 안에 생성된다 함수가객체는 스택(stack) 안에 생성된다. 함수가반환될 때 객체는 스택에서 삭제된다. 객체를남기기 위해서는 new 연산자를 사용하여힙(heap)에서 동적으로 객체를 생성해야 한다.힙(heap)에서 동적으로 객체를 생성해야 한다.

ClassName *pObject = new ClassName();

C++로 시작하는 객체지향 프로그래밍 26

Page 27: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

C++ stringstring

+string() +string(value: string) +string(value: char[]) + t i ( h h i t)

빈 문자열을 만든다.

지정된 문자열 값으로 문자열을 만든다.

지정된 문자 배열로 문자열을 만든다.

지정된 문자로 n 번 초기화된 문자열을 만든다C++ string 클래스

+string(ch: char, n: int)

+append(s: string): string +append(s: string, index: int, n: int): string

+append(s: char[], n: int): string + d( i t h h ) t i

지정된 문자로 n 번 초기화된 문자열을 만든다.

문자열 객체에 문자열 s 를 추가한다.

위치 인덱스에서 시작하는 s 에서 n 개의 문자를 문자열에

추가한다.

s 에서 처음 n 개의 문자를 문자열에 추가한다.

문자 h 의 개의 복사본을 문자열에 추가한다+append(n: int, ch: char): string +assign(s: char[]): string +assign(s: string, index: int, n: int): string

+assign(s: string, n: int): string +assign(n: int, ch: char): string

문자 ch 의 n 개의 복사본을 문자열에 추가한다.

문자열 s 또는 문자 배열을 문자열에 할당한다.

위치 인덱스에서 시작하는 s 에서 n 개의 문자를 문자열에

할당한다.

s 에서 처음 n 개의 문자를 문자열에 할당한다.

문자 ch 의 n 개의 복사본을 문자열에 할당한다.

+at(index: int): char +length(): int +size(): int +capacity(): int +clear(): void +erase(index: int n: int): string

문자열로부터 위치 인덱스의 문자를 반환한다.

문자열의 문자 개수를 반환한다.

length()와 같다.

문자열에 대해 할당된 저장 공간의 크기를 반환한다.

문자열의 모든 문자를 삭제한다.

위치 인덱스에서 시작하는 문자열로부터 n 개의 문자를 삭제한다+erase(index: int, n: int): string +empty(): bool +compare(s: string): int +compare(index: int, n: int, s: string): int +copy(s: char[], index: int, n: int): void +data(): char[]

위치 인덱스에서 시작하는 문자열로부터 n 개의 문자를 삭제한다.

빈 문자열이라면 참을 반환한다.

좌측 두 개의 비교 함수는 같은 반환 값을 갖는 7.9.4 절 “ 문자열

함수” 에서의 strcmp 와 같다.

위치 인덱스에서 시작하는 s 에서 n 개의 문자를 복사한다.

문자열로부터 문자 배열을 반환한다.

+substr(index: int, n: int): string

+substr(index: int): string +swap(s: string): void +find(ch: char): int +find(ch: char index: int): int

위치 인덱스에서 시작하는 n 개의 문자의 부분

문자열(substring)을 반환한다.

위치 인덱스에서 시작하는 문자열의 부분 문자열을 반환한다.

문자열과 s 를 교환한다.

ch 문자를 첫 번째로 만나는 위치를 반환한다.

+find(ch: char, index: int): int

+find(s: string): int +find(s: string, index: int): int

+replace(index: int, n: int, s: string): string

위치 인덱스에서 ch 문자를 첫 번째로 만나는 위치를 반환한다.

첫 번째로 만나는 부분 문자열 s 의 위치를 반환한다.

위치 인덱스에서 시작하는 첫 번째로 만나는 부분 문자열 s 의

위치를 반환한다.

문자열의 위치 인덱스에서 시작하는 n 개의 문자를 문자열 s 로

대체한다

C++로 시작하는 객체지향 프로그래밍 27

+insert(index: int, s: string): string +insert(index: int, n: int, ch: char): string

대체한다.

문자열에 위치 인덱스 위치로 문자열 s 를 삽입한다.

문자열에 위치 인덱스 위치로 ch 문자를 n 번 삽입한다.

Page 28: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

문자열 작성

다음과 같이 문자열의 인수 없는 생성자를사용하여 빈 문자열( t t i )을 생성할 수사용하여 빈 문자열(empty string)을 생성할 수있다:

string newString;

문자열 값이나 문자들의 배열로부터 문자열객체를 생성할 수 있다. 문자를 가지고 있는객체를 생성할 수 있다. 문자를 가지고 있는문자열을 생성하기 위해서는 다음과 같은 구문을사용한다:

string newString(stringLiteral);

C++로 시작하는 객체지향 프로그래밍 28

Page 29: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

문자열의 추가

문자열로 새로운 내용을 추가하기 위하여 몇몇오버로딩(overloading)된 함수를 사용할 수 있다. 예를들어, 다음 코드를 살펴보자:

string s1("Welcome");s1.append(" to C++"); // s1에 " to C++"를 추가cout << s1 << endl; // s1 문자열은 Welcome to C++가 됨cout s1 endl; // s1 문자열은 Welcome to C 가 됨string s2("Welcome");s2.append(" to C and C++", 0, 5); // s2에 " to C"를 추가cout << s2 << endl; // s2 문자열은 Welcome to C가 됨cout << s2 << endl; // s2 문자열은 Welcome to C가 됨string s3("Welcome");s3.append(" to C and C++", 5); // s3에 " to C"를 추가

t << 3 << dl // 3 문자열은 W l t C가 됨cout << s3 << endl; // s3 문자열은 Welcome to C가 됨string s4("Welcome"); s4.append(4, 'G'); // s4에 "GGGG"를 추가

dl // 문자열은 l 가 됨

C++로 시작하는 객체지향 프로그래밍 29

cout << s4 << endl; // s4 문자열은 WelcomeGGGG가 됨

Page 30: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

문자열 할당

문자열에 새로운 내용을 할당하기 위해서 몇몇오버로딩된 함수를 사용할 수 있다. 예를 들어, 다음코드를 살펴보자:

string s1("Welcome");s1.assign("Dallas"); // s1에 "Dallas" 추가cout << s1 << endl; // s1 문자열은 Dallas가 됨cout s1 endl; // s1 문자열은 Dallas가 됨string s2("Welcome");s2.assign("Dallas, Texas", 0, 5); // s2에 "Dalla" 추가cout << s2 << endl; // s2 문자열은 Dalla가 됨cout << s2 << endl; // s2 문자열은 Dalla가 됨string s3("Welcome");s3.assign("Dallas, Texas", 5); // s3에 "Dalla" 추가

t << 3 << dl // 3 문자열은 D ll 가 됨cout << s3 << endl; // s3 문자열은 Dalla가 됨string s4("Welcome");s4.assign(4, 'G'); // s4에 "GGGG" 추가

dl // 문자열은 가 됨

C++로 시작하는 객체지향 프로그래밍 30

cout << s4 << endl; // s4 문자열은 GGGG가 됨

Page 31: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

at, clear, erase, empty 함수, , , p y

지정된 인덱스에서 문자를 검색하기 위해서 at(index), 문자열을 삭제하기 위해서 clear(), 문자열의 부분을삭제하기 위해서 erase(index, n), 문자열이 비어있는지를 검사하기 위하여 empty() 함수를 사용할 수있다. 예를 들어, 다음 코드를 살펴보자:

string s1("Welcome");cout << s1.at(3) << endl; // s1.at(3)은 c를 반환cout s1.at(3) endl; // s1.at(3)은 c를 반환

cout << s1.erase(2, 3) << endl; // s1은 Weme이 됨

s1 clear(); // s1은 빈 문자열이 됨s1.clear(); // s1은 빈 문자열이 됨

cout << s1.empty() << endl; // s1.empty는 참을 뜻하는

1을 반환

C++로 시작하는 객체지향 프로그래밍 31

1을 반환

Page 32: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

문자열 비교프로그램에서 종종 두 개의 문자열 내용을

비교해야 할 경우가 있다 이때는 함수를비교해야 할 경우가 있다. 이때는 compare 함수를사용하면 된다. 이 함수는 C 문자열 strcmp 함수와같은 방법으로 동작을 하며 0보다 큰 값 0 0보다같은 방법으로 동작을 하며 0보다 큰 값, 0, 0보다작은 값 중 하나를 반환한다. 예를 들어, 다음코드를 살펴보자:코드를 살펴보자:

string s1("Welcome");string s2("Welcomg");cout << s1.compare(s2) << endl; // -2를 반환

cout << s2.compare(s1) << endl; // 2를 반환

cout << s1.compare("Welcome") << endl; // 0을 반환

C++로 시작하는 객체지향 프로그래밍 32

cout s .co pa e( We co e ) e d ; // 0을 반환

Page 33: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

부분 문자열 얻기at 함수를 사용하여 문자열로부터 단일

문자를 뽑아낼 수 있다 또한 함수를문자를 뽑아낼 수 있다. 또한 substr 함수를사용하여 문자열로부터 부분 문자열을 얻을수 있다. 예를 들어, 다음 코드를 살펴보자:

string s1("Welcome");를 반환cout << s1.substr(0, 1) << endl; // W를 반환

cout << s1.substr(3) << endl; // come을 반환cout s1.substr(3) endl; // come을 반환

cout << s1.substr(3, 3) << endl; // com을 반환

C++로 시작하는 객체지향 프로그래밍 33

Page 34: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

문자열에서의 검색

문자열에서 하나의 문자나 부분 문자열을검색하기 위해 함수를 사용한다 예를검색하기 위해 find 함수를 사용한다. 예를들어, 다음 코드를 살펴보자:

string s1("Welcome to HTML");cout << s1.find("co") << endl; // 3을 반환

cout << s1 find("co" 6) << endl; // 1을 반환cout << s1.find( co , 6) << endl; // -1을 반환

cout << s1.find('o') << endl; // 4를 반환

cout << s1.find('o', 6) << endl; // 9를 반환

C++로 시작하는 객체지향 프로그래밍 34

Page 35: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

문자열 삽입과 교체다음은 삽입과 교체 함수를 사용하는 예이다:

string s1("Welcome to HTML");string s1( Welcome to HTML );s1.insert(11, "C++ and ");cout << s1 << endl; // s1은 Welcome to C++ and HTML이 됨;string s2("AA");s2.insert(1, 4, 'B');cout << s2 << endl; // s2는 ABBBBA가 됨

string s3("Welcome to HTML");s3.replace(11, 4, "C++");cout << s3 << endl; // s3는 Welcome to C++ 가 됨

C++로 시작하는 객체지향 프로그래밍 35

Page 36: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

문자열 연산자

연산자 설명

[]

=

배열 첨자 연산자를 사용하는 문자에 접근

한 문자열의 내용을 다른 쪽으로 복사

+

+

한 문자열의 내용을 다른 쪽으로 복사

두 개의 문자열을 새로운 문자열로 연결

하나의 문자열의 내용을 다른 쪽으로 추가+=

<<

하나의 문자열의 내용을 다른 쪽으로 추가

문자열을 스트림으로 삽입

>> 스트림으로부터 여백이나 널(null) 문자에 의해 범위가

정해진 문자열로 문자 추출

==, !=, <,

<=, >, >= 문자열을 비교하기 위한 6개 관계 연산자

C++로 시작하는 객체지향 프로그래밍 36

, , 자 비 하기 위 개 계 자

Page 37: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

데이터 필드 캡슐화리스트 9.1의 Circle 클래스에서 데이터 필드 radius는 직접

수정이 가능하다(즉 circle1 radius = 5) 이는 두 가지수정이 가능하다(즉, circle1.radius = 5). 이는 두 가지이유에서 좋은 습관이 되지 못 한다:

첫째, 데이터가 함부로 수정될 수 있다.

둘째, 클래스를 유지하기 어렵게 하고 버그(bug)도 발생하기 쉽게둘째, 클래 를 유지하기 어렵게 하 버 (bug) 발생하기 쉽게만든다.

다른 프로그램이 이미 클래스를 사용한 후에 반지름이 확실히수가 되지 않 하기 위하여 래 수정하기 원한다음수가 되지 않도록 하기 위하여 Circle 클래스를 수정하기 원한다고

가정해 보라.

Circle 뿐만 아니라 Circle 클래스를 사용하는 프로그램도 변경해야Circle 뿐만 아니라 Circle 클래스를 사용하는 프로그램도 변경해야한다. 그러한 프로그램을 종종 클라이언트(client)라고 부른다. 이는클라이언트가 직접 반지름 값을 수정해야 하기 때문이다(즉,

C++로 시작하는 객체지향 프로그래밍 37

myCircle.radius = -5).

Page 38: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

접근자와 변경자일상 구어적인 표현으로 get 함수는 게터(getter) 또는

접근자(accessor)라고 하며 해당 변수를 호출하는 함수를말하고 함수는 세터( ) 또는 변경자( )라고 하며말하고, set 함수는 세터(setter) 또는 변경자(mutator)라고 하며변수를 직접 수정하는 함수를 말한다.

get 함수는 다음 특징을 가진다:get 함수는 다음 특징을 가진다

returnType getPropertyName()

만약 returnType이 bool이라면 get 함수는 규칙에 의해 다음과같이 정의되어야 한다:같이 정의되어야 한다:

bool isPropertyName()

set 함수는 다음 특징을 가진다:bli id tP t N (d t T t V l )

C++로 시작하는 객체지향 프로그래밍 38

public void setPropertyName(dataType propertyValue)

Page 39: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

예: 새로운 Circle 클래스

Circle

-radius: double

원의 반지름(기본값 : 1.0)

기본 원 객체 생성

- 기호는 전용

제어자(modifier)

를 나타냄. +Circle()+Circle(radius: double) +getRadius(): double

기본 원 객체 생성

지정된 반지름으로 원 객체를 생성

원의 반지름 값을 반환

원에 대해 새로운 반지름 값으로 설정+setRadius(radius: double): void+getArea(): double

원에 대해 새로운 반지름 값으로 설정

원의 면적을 반환

Circle2.h RunCircle2.cpp

C++로 시작하는 객체지향 프로그래밍 39

Circle2.h RunCircle2.cpp

Page 40: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

변수의 범위•전역 변수

모든 함수들 바깥에 선언되고 모든 함수에서 접근이 가능모든 함수들 바깥에 선언되고 모든 함수에서 접근이 가능하다. 전역 변수의 범위는 선언에서 시작하여 프로그램의끝까지 계속된다.끝까지 계속된다.

•지역 변수•지역 변수함수의 안에서 정의 된다. 지역 변수의 범위는 선언에서 시작하여 변수를 포함하고 있는 블록의 끝까지 계속된다.작하여 변수를 함하 있는 블록의 끝까지 계속된다

•정적 지역 변수함수의 다음 호출에서 사용되게 하기 위해 영구히 프로그램에 저장된다

C++로 시작하는 객체지향 프로그래밍 40

Page 41: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

변수의 범위데이터 필드는 변수로 선언되며 클래스 안에서 모든

생성자와 함수에 접근이 가능하다. 이런 의미로 데이터생성자와 함수에 접근이 가능하다. 이런 의미 데이터필드는 전역 변수와 같다고 할 수 있다. 그러나 데이터 필드와함수는 클래스 안에서 몇 가지 방법으로 선언될 수 있다. 예를들어, 다음의 모든 선언은 같은 것이다:

class Circle {

class Circle {

class Circle { {

public: Circle(); Circle(double);

{private: double radius; public:

{ public: Circle(); Circle(double); double getArea();

private: double radius; public: double getArea();

double getArea(); double getRadius(); void setRadius(double); public:

double getRadius(); void setRadius(double); private: double radius; double getArea();

double getRadius(); void setRadius(double);};

(a) (b)

public: Circle(); Circle(double); };

double radius; };

(c)

C++로 시작하는 객체지향 프로그래밍 41

(a) (b) (c)

Page 42: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

변수의 범위지역 변수는 지역적으로 함수 안에서 선언하

고 그 안에서 사용된다 만약 지역 변수가 데이고 그 안에서 사용된다. 만약 지역 변수가 데이터 필드와 같은 이름을 갖는다면 지역 변수가우선권을 가지며 같은 이름을 가진 데이터 필드는 숨겨지게 된다. 예를 들어, 다음 리스트,9.8 프로그램에서 x는 데이터 필드와 함수 안에서 지역 변수로 정의되었다에서 지역 변수로 정의되었다.

RunHideDataField

C++로 시작하는 객체지향 프로그래밍 42

RunHideDataField

Page 43: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

this 포인터• 때로는 함수 안에서 클래스의 숨겨진 데이터 필드를 참조할필요가 있다.필 가 있다.

-예를 들어, 데이터 필드 이름이 데이터 필드를 위한 설정함수에서 매개변수(parameter) 이름으로 사용되는 경우가있다. 이런 경우 매개변수에 새로운 값을 설정하기 위해서 함수내의 숨겨진 데이터 필드 이름을 참조할 필요가 있다내의 숨겨진 데이터 필드 이름을 참조할 필요가 있다.

• 숨겨진 데이터 필드는 호출 객체로 참조할 수 있는 특별히 제작된 포인터인 this 포인터를 사용하여 접근이 가능하다. 작된 인터인 인터를 사용하여 접근이 가능하다

- this 포인터를 사용하여 리스트 9.9의 Circle 클래스 구현을 다시 작성하였다.

Circle3

C++로 시작하는 객체지향 프로그래밍 43

Circle3

Page 44: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

함수로 객체 전달값(value)에 의하거나 참조(reference)에 의해

객체를 전달할 수 있다객체를 전달할 수 있다. c: Circle

c 는 myCircle 의 별명(alias) c: myCircle 의 주소

radius: 5.0

myCircle을 c로 복사

myCircle: Circle radius: 5.0

myCircle: Circle radius: 5.0

myCircle: Circle radius: 5.0

RunPassObjectByValue

RunPassObjectByReference

C++로 시작하는 객체지향 프로그래밍 44

RunPassObjectToPointer

Page 45: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

객체의 배열Circle circleArray[3] = {Circle(3), Circle(4), Ci l (5)}Circle(5)};

RunTotalArea

C++로 시작하는 객체지향 프로그래밍 45

Page 46: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

클래스 추상화와 캡슐화클래스 추상화는 클래스 사용과 클래스 구현을분리하는 것이다분리하는 것이다. -클래스를 만든 사람은 클래스에 대한 내용을 설명문으로

제공하여 사용자가 그 클래스를 어떻게 사용하는지를 알 수제공하여 사용자가 그 클래스를 어떻게 사용하는지를 알 수

있도록 해 줄 수 있다.

-클래스의 사용자는 클래스가 어떻게 구현되는지 알 필요가 없다.

-클래스 구현에 대한 세부적인 내용은 사용자에게 캡슐화되어

있어 사용자에게는 감춰진 형태로 있게 된다.

클래스 규약

(함수 원형과 클래스 구현은

클라이언트(클래스

를 사용하는

클라이언트는

범용 상수)

클래스

를 사용하는

프로그램의

부분)에게 숨겨진 블랙박스와 같다.

클래스에 대한 규약을

통해 클래스를

사용한다.

C++로 시작하는 객체지향 프로그래밍 46

Page 47: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

실전 예제: Loan 클래스 Loan

-annualInterestRate: double numberOfYears: int

대출의 연간 이자율 (기본 : 2.5)

대출 년 수 (기본 : 1)-numberOfYears: int -loanAmount: double +Loan() +Loan(annualInterestRate: double

대출 년 수 (기본 : 1)

대출액 (기본 : 1000)

기본 대출 객체 생성

특정 이자율 년 수 대출액을 갖는 대출 객체 생성+Loan(annualInterestRate: double, numberOfYears: int, loanAmount: double)

+getAnnualInterestRate(): double +getNumberOfYears(): int

특정 이자율, 년 수, 대출액을 갖는 대출 객체 생성

대출의 연간 이자율을 반환

대출의 년 수를 반환+getNumberOfYears(): int +getLoanAmount(): double +setAnnualInterestRate( annualInterestRate: double): void+setNumberOfYears(

대출의 년 수를 반환

대출액을 반환

대출의 연간 이자율을 설정

+setNumberOfYears( numberOfYears: int): void +setLoanAmount( loanAmount: double): void +getMonthlyPayment(): double

대출의 새로운 년 수를 설정 대출의 새로운 총액을 설정

대출의 매월 납입금을 반환

T tL Cl RL

+getMonthlyPayment(): double +getTotalPayment(): double

대출의 매월 납입금을 반환

대출의 전체 납입금을 반환

L h

C++로 시작하는 객체지향 프로그래밍 47

TestLoanClass RunLoan.cppLoan.h

Page 48: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

생성자 초기화 목록생성자 초기화 목록

Circle::Circle()

: radius(1)

Circle::Circle()

{ 같다

{

}

radius = 1;

}

(a) (b)

C++로 시작하는 객체지향 프로그래밍 48

Page 49: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

인수 없는 생성자의 역할인수 없는 생성자의 역할

만약 데이터 필드가 객체 유형이라면 객체 유형에대한 인수 없는 생성자가 데이터 필드의 객체를만들기 위해서 자동적으로 호출된다.

만약 인수 없는 생성자가 존재하지 않는다면 컴파일오류가 발생할 것이다.오류가 발생할 것이다.

예를 들어, 리스트 9.17의 코드는 오류가 발생하게 되는데, 이는 Action 클래스의 time 데이터 필드(24번 줄)는 인수 없는 생성자가 없는 Time( )클래스로 생성되기 때문이다.

D f ltC t t 1 NoDefaultConstructor2

C++로 시작하는 객체지향 프로그래밍 49

DefaultConstructor1 NoDefaultConstructor2

Page 50: chap09.ppt [호환 모드]parkjonghyuk.net/lecture/2010-2nd-lecture/programming2/... · 2010-10-03 · Title: Microsoft PowerPoint - chap09.ppt [호환 모드] Author: hyuks00 Created

Thanks

Q & AQ & A

C++로 시작하는 객체지향 프로그래밍 50


Recommended