설계란 무엇인가?

Similar documents
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

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

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

설계란 무엇인가?

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

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

PowerPoint Presentation

C++ Programming

C++ Programming

슬라이드 1

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

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

Microsoft PowerPoint - Chapter 6.ppt

PowerPoint Template

PowerPoint Template

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

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

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

PowerPoint Presentation

Microsoft PowerPoint - C++ 5 .pptx

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍

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

C++ Programming

Microsoft PowerPoint - Chap12-OOP.ppt

설계란 무엇인가?

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

Microsoft PowerPoint - 6주차.pptx

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

JAVA PROGRAMMING 실습 08.다형성

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

8. 클래스 D는클래스 A, 클래스 B, 클래스 C로부터상속받아맊들고싶다. 아래빈칸을채우시오. ( 대소문자주의하시오 ) class D { ; Student s; 11. 다음프로그램의실행결과는? 9. 다음프로그램의실행결과는? class A{ A(){cout << " 생성

슬라이드 1

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

C++ Programming

설계란 무엇인가?

설계란 무엇인가?

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

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

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

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

Slide 1

Microsoft PowerPoint - Chapter 10.ppt

C++ 기본문법 정리

11장 포인터

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

PowerPoint Template

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

Slide 1

Programming hwp

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

쉽게 풀어쓴 C 프로그래밍

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

쉽게 풀어쓴 C 프로그래밍

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

KNK_C_05_Pointers_Arrays_structures_summary_v02

Blog

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

설계란 무엇인가?

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

JVM 메모리구조

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

JAVA PROGRAMMING 실습 02. 표준 입출력

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

JAVA PROGRAMMING 실습 05. 객체의 활용

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

쉽게 풀어쓴 C 프로그래밊

Microsoft PowerPoint - chap06-2pointer.ppt

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

Slide 1

PowerPoint 프레젠테이션

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

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

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

PowerPoint Presentation

12 장파일입출력 파일입출력의기초파일열기, 사용하기, 닫기파일입출력모드문자단위파일입출력텍스트파일과이진파일 read, write 함수에의한이진파일입출력임의접근입출력스트림상태입출력연산자오버로딩과파일입출력 C++ 프로그래밍입문

쉽게 풀어쓴 C 프로그래밍

Slide 1

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

080629_CFP °ø°³¿ë.hwp

Microsoft PowerPoint 세션.ppt

PowerPoint Presentation

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

Microsoft PowerPoint - java1 [호환 모드]

PowerPoint Template

Microsoft PowerPoint 장강의노트.ppt

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

PowerPoint Presentation

17장 클래스와 메소드

Design Issues

슬라이드 1

Microsoft PowerPoint - Lect04.pptx

chap10.PDF

Slide 1

강의계획서 1. 강의개요 학습과목명 객체지향프로그래밍 Ⅰ 학점 3 학점교 강사명교 강사전화번호 강의시간 4시간강의실수강대상 2. 교과목학습목표 4차산업혁명시대의도래로컴퓨터와프로그래밍에대한관심이커지고있으며, 여러분야에서소프트웨어의중요성을강조하며, 새시대를이끌

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

Microsoft PowerPoint - ch07 - 포인터 pm0415

PowerPoint Presentation

PowerPoint 프레젠테이션

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

Transcription:

금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하

9 강. 클래스의활용목차 멤버함수의외부정의 this 포인터 friend 선언 static 멤버 임시객체 1 /17

9 강. 클래스의활용멤버함수의외부정의 멤버함수정의구현방법 내부정의 : 클래스선언내에함수정의구현 외부정의 클래스선언 : 함수프로토타입 멤버함수정의 : 클래스선언외부에구현 다음클래스의멤버함수를외부정의로구현하면? class CPoint int x, y; 2 /17 CPoint(int a, int b) : x(a), y(b) ~CPoint() cout << " 소멸자 " << endl; void Move(int a, int b) x += a; y += b; ;

9강. 클래스의활용 class CPoint 멤버함수의외부정의 int x, y; 클래스선언에는 class CPoint int x, y; CPoint(int a, int b) : x(a), y(b) ~CPoint() cout << " 소멸자 " << endl; void Move(int a, int b) x += a; y += b; ; 3 /17 클래스외부정의시 함수명앞에클래스명이 붙어야함 내부정의든외부정의든 의미는같음 프로토타입만 CPoint(int a, int b); ~CPoint(); void Move(int a, int b); ; CPoint::CPoint(int a, int b) : x(a), y(b) CPoint::~CPoint() cout << " 소멸자 " << endl; void CPoint::Move(int a, int b) x += a; y += b;

9 강. 클래스의활용멤버함수의외부정의 C++ 프로그램 ( 프로젝트 ) 의일반적인파일구조 클래스의선언 : Point.h 클래스의외부정의 : Point.cpp, #include Point.h 클래스를사용하는곳 : #include Point.h 그리고사용 4 /17 Point.h : 클래스선언 Point.cpp 멤버함수외부정의 #include Point.h main.cpp CPoint 클래스사용 #include Point.h

9 강. 클래스의활용 this 포인터 x y 클래스와객체생성시메모리구조 멤버변수 : 각객체별로생성 멤버함수 : 한개만생성 P1 1 2 P2 3 4 this 포인터! class CPoint int x, y; CPoint(int a, int b); void Move(int a, int b); ; 5 /17 CPoint::CPoint(int a, int b) : x(a), y(b) void CPoint::Move(int a, int b) x += a; y += b; P1의 x, y라는것을어떻게알까? void main(void) CPoint P1(1, 2); CPoint P2(3, 4); P1.Move(1, 1); P2.Move(2, 2);

9 강. 클래스의활용 this 포인터 this 포인터 P1.Move(1, 1) 멤버함수호출시호출하는객체의주소를받는포인터 멤버함수의개념적구조 x y P1 1 2 P2 3 4 void CPoint::Move(int a, int b) x += a; y += b; P1.Move(1, 1) CPoint::Move(&P1, 1, 1) void CPoint:: Move(CPoint *this, int a, int b) this->x += a; 현재 this 포인터가 this->y += b; P1을가리키므로 P1의 x, y에대해처리 6 /17

9 강. 클래스의활용 this 포인터 7 /17 this 포인터를명시적으로활용가능 class CPoint int x, y; this가가리키는 CPoint(int a, int b) : x(a), y(b) 객체자체를반환 CPoint &MoveX(int a) x += a; return (*this); CPoint &MoveY(int b) y += b; return (*this); void Print() cout << "(" << x << ", " << y << ")" << endl; ; void main(void) CPoint P1(1, 2); P1.MoveX(3).MoveY(4); P1.Print(); MoveX 함수호출결과가 다시 P1 그자체임

9 강. 클래스의활용 this 포인터 main 함수와같이실행될수있도록 CArray 클래스 를구현해보라. 생성자 소멸자 GetSize GetElement Print void main(void) CArray Ary(5); for (int i = 0; i < Ary.GetSize(); i++) Ary.GetElement(i) = i + 1; Ary.Print(); 8 /17

9 강. 클래스의활용 this 포인터 9 /17 프로그램확인 class CArray int *pary; int Count; CArray(int Co) Count = Co; pary = new int[count]; ; ~CArray() delete [] pary; int GetSize() return Count; int &GetElement(int index) return pary[index]; void Print() cout << " "; for (int i = 0; i < Count; i++) cout << pary[i] << " "; cout << "" << endl; ;

9 강. 클래스의활용 friend 선언 private 멤버에대한접근 내부접근만가능 : 해당클래스의멤버함수내 외부접근불가능 예외 : friend에의한접근가능 friend 선언 특정클래스입장에서다른전역함수나클래스또는다른클래스의멤버함수를자신의친구 (friend) 로선언하는것 friend 선언의종류 전역함수를 friend로선언 다른클래스를 friend로선언 다른클래스의멤버함수를 friend로선언 10 /17

9 강. 클래스의활용 friend 선언 11 /17 전역함수에대한 friend 선언 class CPoint int x; int y; CPoint Center(CPoint P1, CPoint P2) CPoint P1(1, 2); CPoint Po; Po.x = (P1.x + P2.x) / 2; Po.y = (P1.y + P2.y) / 2; return Po; void main(void) CPoint 객체의 private 멤버인 x, y 에접근가능 CPoint P2(3, 4); CPoint P3 = Center(P1, P2); P3.Print(); CPoint(int a = 0, int b = 0) : x(a), y(b) void Print() cout << "(" << x << ", " << y << ")" << endl; friend CPoint Center(CPoint P1, CPoint P2); ; Center 함수를 friend 로선언하였으므로 Center 함수내에서는 Cpoint 객체의 x, y 에접근가능

9 강. 클래스의활용 friend 선언 12 /17 friend 선언시참고사항 friend 선언의위치는어디든상관없음 (private, public 무관 ) friend 로선언된전역함수자체는일반함수임 friend 선언은멤버함수가아님. Po.Center(P1, P2) (X) 다른클래스또는 다른클래스의 특정멤버함수를 friend 로선언 class CPoint int x; int y; CArray 클래스의모든멤버함수에서는 CPoint 객체의 x, y 에접근가능 friend class CArray; friend int CCircle::GetArea(void); ; CCircle 클래스의 GetArea 함수에서는 CPoint 객체의 x, y 에접근가능

9 강. 클래스의활용 static 멤버 13 /17 static 멤버변수 클래스당단하나만생성 모든객체가공유 클래스 변수 변수생성을위해서는별도의명시적인선언필요 객체또는클래스명을통해접근가능 물론 private 영역에있을경우외부접근불가능 class CPoint int x; int y; 명시적선언필요 객체를통해서접근가능 클래스를통해서접근가능 static int Count; CPoint(int a, int b) : x(a), y(b) ; int CPoint::Count = 0; void main(void) CPoint P1(1, 2); CPoint P2(3, 4); P1.Count = 1; P2.Count = 2; CPoint::Count = 3;

9 강. 클래스의활용 static 멤버 static 멤버함수 static 멤버 ( 변수또는함수 ) 에만접근가능 객체또는클래스명을통해접근가능 물론 private 영역에있을경우외부접근불가능 class CPoint int x; int y; 클래스또는객체를 통해서호출가능 CPoint(int a, int b) : x(a), y(b) static int Count; static int GetCount() return Count; ; static 멤버에만접근가능 int CPoint::Count = 0; void main(void) CPoint P1(1, 2); CPoint P2(3, 4); P1.Count++; CPoint::Count++; cout << CPoint::GetCount() << endl; 14 /17

9 강. 클래스의활용 static 멤버 현재생성되어있는 CPoint 클래스객체의개수를 저장하고알아올수있도록만들고자한다. static 멤 버변수와함수를사용하여 CPoint 클래스를만들어 보라. void main(void) CPoint P1(1, 2); CPoint *P2 = new CPoint(3, 4); cout << "count : " << CPoint::GetCount() << endl; delete P2; cout << "count : " << P1.GetCount() << endl; 15 /17

9 강. 클래스의활용 static 멤버 프로그램확인 class CPoint int x, y; static int count; 생성자 : 객체가생성될때 1 증가 CPoint(int a = 0, int b = 0) : x(a), y(b) count++; ~CPoint() count--; 소멸자 : 객체가소멸될때 1 감소 static int GetCount() return count; ; int CPoint::count = 0; 16 /17

9 강. 클래스의활용임시객체 임시객체 일시적인필요에의해생성되는객체 한번사용되고나서는사라지게됨 일반적인객체생성 CPoint P1; CPoint P2(1, 1) 이름이붙지않음 이후이름이붙을경우에는일반객체가됨 17 /17 void main(void) CPoint(1, 2).Print(); CPoint P1 = CPoint(3, 4); CPoint &P2 = CPoint(5, 6); CPoint P3; P3 = CPoint(7, 8); CPoint(1, 2) : Print() 후사라짐 * CPoint P1(3, 4) 와동일 CPoint(3, 4), CPoint(5, 6) P1, P2라는이름이붙으므로더이상임시객체가아님 CPoint(7, 8) : 대입을위해사용된후사라짐