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

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

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

Microsoft PowerPoint - C++ 5 .pptx

쉽게 풀어쓴 C 프로그래밍

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

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

쉽게 풀어쓴 C 프로그래밍

C프로-3장c03逞풚

설계란 무엇인가?

C++ Programming

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

슬라이드 1

PowerPoint Template

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

Microsoft PowerPoint - Chapter 6.ppt

Microsoft PowerPoint - [2009] 02.pptx

PowerPoint Presentation

C++ Programming

Programming hwp

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

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

Microsoft PowerPoint - Chap12-OOP.ppt

PowerPoint Presentation

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

C++ Programming

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

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

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

설계란 무엇인가?

PowerPoint Template

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

설계란 무엇인가?

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

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

11장 포인터

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

adfasdfasfdasfasfadf

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

class Sale void makelineitem(productspecification* spec, int qty) SalesLineItem* sl = new SalesLineItem(spec, qty); ; 2. 아래의액티비티다이어그램을보고 Java 또는 C ++,

C++ Programming

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

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

PowerPoint 프레젠테이션

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

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

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

Microsoft PowerPoint - Chapter 1-rev

080629_CFP °ø°³¿ë.hwp

Microsoft PowerPoint - chap06-2pointer.ppt

PowerPoint Template

KNK_C_05_Pointers_Arrays_structures_summary_v02

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

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070>

Blog

슬라이드 1

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

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

Microsoft PowerPoint - Chapter 10.ppt

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - 6주차.pptx

설계란 무엇인가?

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

Lab 3. 실습문제 (Single linked list)_해답.hwp

chap10.PDF

PowerPoint Presentation

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

Microsoft PowerPoint - Java7.pptx

Design Issues

12 강. 문자출력 Direct3D 에서는문자를출력하기위해서 LPD3DXFONT 객체를사용한다 LPD3DXFONT 객체생성과초기화 LPD3DXFONT 객체를생성하고초기화하는함수로 D3DXCreateFont() 가있다. HRESULT D3DXCreateFont

쉽게 풀어쓴 C 프로그래밍

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

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

설계란 무엇인가?

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

Contents. 1. PMD ㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍ 2. Metrics ㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍ 3. FindBugs ㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍ 4. ㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍ

Slide 1

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

PowerPoint Presentation

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

Slide 1

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

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

The C++ Programming Language 4 장타입과선언 4.11 연습문제 Hello,world! 프로그램을실행시킨다. 프로그램이컴파일되지않으면 B3.1 을참고하자. #include<iostream> //#include 문, 헤더파일, 전처리지시

JAVA PROGRAMMING 실습 08.다형성

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

C 언어 프로그래밊 과제 풀이

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

PowerPoint Presentation

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

PowerPoint 프레젠테이션

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

JUNIT 실습및발표

PowerPoint 프레젠테이션

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

BMP 파일 처리

Microsoft PowerPoint - 2강

Transcription:

클래스의응용 클래스를자유자재로사용하자.

이장에서다룰내용 1 객체의치환 2 함수와클래스의상관관계

01_ 객체의치환 객체도변수와마찬가지로치환이가능하다. 기본예제 [7-1] 객체도일반변수와마찬가지로대입이가능하다. 기본예제 [7-2] 객체의치환시에는조심해야할점이있다. 복사생성자의필요성에대하여알아보자.

[ 기본예제 7-1] 클래스의치환 01 #include<iostream> 02 using namespace std; 03 class Unit { 04 int x,y; 05 public: 06 void set(int i, int j) { x=i; y=j; } 07 void show() { cout << x << ", " << y << "\n"; } 08 }; 09 10 int main(int argc, char* argv[]) 11 { 12 Unit A, B; 13 A.set(12,4); 14 B = A; 15 A.show(); 16 B.show(); 17 return 0; 18 } Unit 클래스를정의한다. A 를 B 에치환한다.

[ 기본예제 7-2] 클래스의치환 #2 01 #include<iostream> 02 #include<cstring> 03 using namespace std; 04 class Unit { 05 char* str; 06 public: 07 Unit() 08 { 09 str = NULL; 10 } 11 12 Unit(char* agstr) 13 { 14 int strlength = strlen(agstr); 15 str = new char[strlength + 1]; 16 strcpy(str, agstr); 17 } 18 19 void set(char* agstr) 20 { 21 strcpy(str, agstr); 22 } 23 24 void show() 25 { 26 cout << str << "\n"; 27 } 28 }; 29 30 int main(int argc, char* argv[]) 31 { 32 Unit A("TEST1"); 33 Unit B = A; 34 35 A.set("TEST2"); 36 37 A.show(); 38 B.show(); 39 return 0; 40 } Test1 의값을갖는 A 를생성한다. B 에 A 를복사한다. A 의내용을 내용을 Test1 Test1 에서 에서 B 로바꾼다.

01_ 객체의치환 복사생성자 기본예제 [7-2] 에서일어난이상한현상의이유를알려면, 복사생성자에대해서알아야한다. B 를생성하는데에는기본생성자가아닌복사생성자가사용된것이다. 기본생성자들이호출되는상황을파악하기위해서기본예제 [7-2] 를약간수정한기본예제 [7-3] 을실행해보자. 기본예제 [7-4] 에서복사생성자를추가하여실행해보자.

[ 기본예제 7-3] 클래스의치환 #3 07 Unit() 08 { 09 cout << "I'm a default constructor\n"; n"; 10 str = NULL; 11 } 12 13 Unit(char* agstr) 14 { 15 cout << "I'm a default constructor with parameters\n"; 16 int strlength = strlen(agstr); 17 str = new char[strlength + 1]; 18 strcpy(str, agstr); 19 } 32 int main(int argc, char* argv[]) 33 { 34 Unit A("TEST1"); 35 Unit B = A; 36 37 37 cout << " cout << "---------------------------------- " ----------------------------------\n"; 38 A.set("TEST2"); 39 40 A.show(); 41 B.show(); 42 43 return 0; 44 } 기본생성자가 생성자가실행된 실행된것을 것을화면에 화면에표시한다. 입력인자를실행된것을 인자를받은 받은경우에 것을화면에 경우에대한 화면에표시한다. 대한생성자가 Separator 표시.

[ 기본예제 7-4] 클래스의치환 #4 복사생성자추가 07 Unit() 08 { 09 cout << "I'm a default constructor\n"; 10 str = NULL; 11 } 12 13 Unit(char* agstr) 14 { 15 cout << "I'm a default constructor with parameters\n"; 16 int strlength = strlen(agstr); 17 str = new char[strlength + 1]; 18 strcpy(str, agstr); 19 } 20 Unit(Unit& agunit) 21 { 22 cout << "I'm a copy constructor\n"; n"; 23 str = agunit.str; 24 } 복사생성자가화면에표시한다. 생성자가실행된 실행된것을

01_ 객체의치환 얕은복사와깊은복사 얕은복사란, 우리가앞에서본예제들과같이 B 객체를생성하면서, 이미 A 가만들어놓은메모리의주소만을참조하도록복사하는것을의미한다. 깊은복사란, 얕은복사와는달리객체들간의간섭이일어나지않는아래와같은형태를의미한다.

[ 기본예제 7-5] 깊은복사 7-4 에서복사생성자만을수정. 07 Unit() 08 { 09 cout << "I'm a default constructor\n"; 10 str = NULL; 11 } 12 13 Unit(Unit& agunit) 14 { 15 cout << "I'm a copy constructor\n"; 16 str = new char[strlen(agunit.str) + 1]; 17 strcpy(str, agunit.str); 18 } 깊은복사를 복사를하기 하기위해서 문자열을복사한다. 위해서메모리를 메모리를새로 새로할당한다.

02_ 함수와클래스의상관관계 함수의입력인자로전달하는클래스객체 클래스객체를함수에전달하려면? 함수의 함수의입력인자로 입력인자로다른 다른기본 기본변수형들을 변수형들을전달하는 전달하는것과 것과동일하다. 즉, 함수의입력변수에대한정의를클래스형으로선언한다음, 함수를호출할때그클래스의객체를인자로사용하면된다.

[ 기본예제 7-7] 입력인자로전달하는클래스객체 01 #include <iostream> using namespace std; 02 class Unit { 03 int defaultarmor; 04 public: 05 Unit(int armor) { defaultarmor = armor; } 06 int GetDefaultArmor() { return defaultarmor; } 07 }; 08 클래스가입력인자인 입력인자인함수를 함수를정의한다. 09 int GetEnhancedArmor(Unit aunit) 10 { 11 return aunit.getdefaultarmor() * 2; 12 } 13 14 int main(int argc, char* argv[]) 15 { 16 Unit A(1), B(2); 17 cout << "Unit A : " << GetEnhancedArmor(A) << "\n"; 18 cout << "Unit B : " << GetEnhancedArmor(B) << "\n"; 19 return 0; 20 } A 와 B 클래스함수를수행한다. 클래스객체를 객체를입력인자로

02_ 함수와클래스의상관관계 함수로부터반환되는클래스객체 함수에게객체를입력인자로전달할수있는것과마찬가지로, 함수도클래스객체를반환할수있다. 객체를반환하기위해서는미리선언한후, 정상적인 return 문을사용하여반환하면 02_ 함수와된다클래스의. 상관관계

[ 기본예제 7-8] 반환되는클래스객체 01 #include <iostream> 02 using namespace std; 03 class Unit { 04 int defaultarmor; 05 public: 06 void Show() { cout << "defaultarmor : " << defaultarmor << "\n"; } 07 void Set(int armor) { defaultarmor = armor; } 08 }; 09 10 Unit GetUnit() 11 { 12 int armor; 13 Unit temp; 14 cout << "Enter a default armor : "; 15 cin >> armor; 16 temp.set(armor); 17 return temp; 18 } 19 20 int main(int argc, char* argv[]) 21 { 22 Unit a; 23 a = GetUnit(); 24 a.show(); 25 return 0; 26 } 클래스가객체를 객체를결과값으로 결과값으로반환한다. 함수의결과로받아서저장한다. 결과로클래스 클래스객체를

02_ 함수와클래스의상관관계 Friend 함수 클래스의멤버가아니면서도, 클래스의비공개원소에접근할수있게해주는함수이다. 하나의함수가두개이상의서로다른클래스들의비공개멤버에접근할수도 02_ 함수와있다. 클래스의상관관계 Friend 함수는멤버함수가아닌일반함수로정의되며, 함수명앞에 friend 라는키워드를붙여서선언한다.

[ 기본예제 7-9] friend 함수를이용한비공개멤버로의접근 01 #include <iostream> using namespace std; 02 class Unit { 03 int x,y; 04 public: 05 Unit(int i, int j) { x=i; y=j; } 06 friend bool issame(unit a); 07 }; 08 09 bool issame(unit a) 10 { 11 if (a.x == a.y ) return true; 12 else return false; 13 } 14 15 int main(int argc, char* argv[]) 16 { 17 Unit a(1,2), b(3,3); 18 19 cout << "a(1,2) : " << issame(a) << "\n"; 20 cout << "b(3,3) : " << issame(b) << "\n"; 21 return 0; 22 } Friend 함수를정의한다. Friend 함수의 함수의몸체를 몸체를구현한다. Friend 함수를호출한다.

예제모음 _12 의요구사항및실행결과 요구사항 1 다음과같은사각형클래스가있다. class Square{ public: int height,width; void addsquare(); }; 사각형클래스객체를입력으로받아서, 자신과입력받은사각형의넓이의합을화면에출력하도록함수 addsquare 를수정하라. 2 addsquare 를수정한후, 적당한생성자를만들어서 5x3, 4x4 인두객체에대해함수가정상적으로작동하는지화면에출력해본다. 실행결과

예제모음 _12 소스 01 #include <iostream> 02 using namespace std; 03 class Square { 04 public: 05 int height,width; 06 Square(int x, int y) 07 { 08 height = x; 09 width = y; 10 } 11 void addsquare(square A) 12 { 13 int area_a = A.height * A.width; 14 int area = height * width; 15 cout << " 두사각형넓이의합은 : " << area_a + area << "\n"; 16 } 17 }; 18 19 20 int main(int argc, char* argv[]) 21 { 22 Square A(5,3), B(4,4); 23 A.addSquare(B); 24 return 0; 25 } 생성자를구현한다. 클래스를입력인자로갖는멤버함수를정의하여넓이를계산한다.

예제모음 _13 의요구사항및실행결과 요구사항 1 다음과같은사각형클래스가있다. class Square{ int height,width; public: void addsquare(); }; 사각형클래스객체를입력으로받아서, 자신과입력받은사각형의넓이의합을화면에출력하도록함수 addsquare 를수정하라. 2 클래스의멤버변수인 height, width 는 private 로고정하고, 프렌드함수를 사용하도록한다. 3 addsquare 를수정한후, 적당한생성자를만들어서 5x3, 4x4 인두객체에대해함수가정상적으로작동하는지화면에출력해보도록한다. 실행결과

예제모음 _13 소스 01 #include <iostream> 02 using namespace std; 03 class Square { 04 int height,width; 05 public: 06 Square(int x, int y) 07 { 08 height = x; 09 width = y; 10 } 11 friend void addsquare(square A, Square B) 12 { 13 int area_a = A.height * A.width; 14 int area_b = B.height * B.width; 15 cout << " 두사각형넓이의합은 : " << area_a + area_b << "\n"; 16 } 17 }; 18 19 20 int main(int argc, char* argv[]) 21 { 22 Square A(5,3), B(4,4); 23 addsquare(a, B); 24 return 0; 25 } Friend 함수를입력받은넓이의합을 함수를정의하여 받은두객체의 합을구한다.

요약 클래스객체의치환 클래스객체도일반변수와동일하게치환이가능하다. 그러나클래스안에서포인터를다룰경우에는조심스럽게치환해야한다. 얕은복사와 깊은복사 메모리의주소만을참조하여주소만복사하는것을 얕은복사 (shallow copy) 라고하며, 원본값까지복사하는것을 깊은복사 (deep copy) 라고한다. 얕은복사로인해동작에문제가일어나는경우에는깊은복사를사용해야한다. [ 얕은복사의예 ] [ 깊은복사의예 ] 함수와클래스의상관관계 함수의입력인자로써다른기본변수형들을함수에전달하는것과같은방법으로클래스객체를함수에전달할수있으며, 함수의출력인자로써도동일한방법으로클래스객체를반환할수있다. Friend 함수 Friend 함수란클래스의멤버가아니면서해당클래스의비공개원소에접근할수있는함수를뜻한다. 주로이미작성된클래스의멤버들을크게수정하지않고접근해야할필요성이있을때사용된다.

www.themegallery.com IT CookBook for Beginner, C++ 기초 7 장끝