C++ 기본문법 정리

Similar documents
C++ 기본문법 정리

설계란 무엇인가?

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

C++ Programming

C++ Programming

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

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

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

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

슬라이드 1

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

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

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

슬라이드 1

chap10.PDF

C++ Programming

PowerPoint Template

Microsoft PowerPoint - Chapter 6.ppt

Microsoft PowerPoint - C++ 5 .pptx

Slide 1

PowerPoint Template

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

PowerPoint Presentation

PowerPoint Template

PowerPoint Presentation

Microsoft PowerPoint - Chap12-OOP.ppt

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

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 - additional06.ppt [호환 모드]

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

C# Programming Guide - Types

JVM 메모리구조

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

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

Blog

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

1

쉽게 풀어쓴 C 프로그래밍

Chapter 6 Objects and Classes

11장 포인터

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - Chapter 1-rev

PowerPoint 프레젠테이션

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

PowerPoint 프레젠테이션

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 - chap10-함수의활용.pptx

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

C++ Programming

JAVA PROGRAMMING 실습 08.다형성

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

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

Slide 1

PowerPoint Template

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

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - CSharp-10-예외처리

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

Design Issues

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

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

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

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

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

Microsoft PowerPoint - ch07 - 포인터 pm0415

슬라이드 1

Microsoft PowerPoint - Chapter 10.ppt

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

OCW_C언어 기초

<4D F736F F F696E74202D2038C0E55FB0ADC0C7B3EBC6AE28B0A1BBF3C7D4BCF6BFCD20B4D9C7FCBCBA29>

KNK_C_05_Pointers_Arrays_structures_summary_v02

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

Slide 1

17장 클래스와 메소드

10.0pt1height.7depth.3width±â10.0pt1height.7depth.3widthÃÊ10.0pt1height.7depth.3widthÅë10.0pt1height.7depth.3width°è10.0pt1height.7depth.3widthÇÁ10.0pt1height.7depth.3width·Î10.0pt1height.7depth.3width±×10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width¹Ö pt1height.7depth.3widthŬ10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width½º, 10.0pt1height.7depth.3width°´10.0pt1height.7depth.3widthü, 10.0pt1height.7depth.3widthº¯10.0pt1height.7depth.3width¼ö, 10.0pt1height.7depth.3width¸Þ10.0pt1height.7depth.3width¼Ò10.0pt1height.7depth.3widthµå

JAVA PROGRAMMING 실습 02. 표준 입출력

Microsoft PowerPoint - [2009] 02.pptx

Slide 1

제11장 프로세스와 쓰레드

Microsoft PowerPoint - 2강

PowerPoint Presentation

PowerPoint 프레젠테이션

PowerPoint Presentation

Microsoft PowerPoint - 02-Class Review.pptx

Microsoft PowerPoint - java1 [호환 모드]

Microsoft PowerPoint - 6주차.pptx

11장 포인터

Slide 1

Microsoft PowerPoint - chap11

PowerPoint 프레젠테이션

PowerPoint Presentation

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

JAVA PROGRAMMING 실습 07. 상속

Microsoft PowerPoint - java2 [호환 모드]

윈도우시스템프로그래밍

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

Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode]

Transcription:

객체지향프로그래밍응용 Chap 1. 사전학습 2013.09.06. 오병우 컴퓨터공학과

기술동향 프로그래밍방식의변천 기계중심의 Stored-Procedure 기계어, 어셈블리언어 구조적프로그래밍 Pascal, C 잘정의된제어구조, 코드블록, GOTO 문사용억제, 순환호출 (recursion) 과지역변수를지원하는독립형부프로그램 기능별모듈화 객체지향프로그래밍 C++ 객체단위로모듈화 Data 와 Control 통합 복잡도감소목표 Run-time 시정보처리가많아구조적프로그래밍방식보다실행속도가느림 Department of Computer Engineering 2

C vs. C++ 계산기프로그램 으로살펴보는 C 와 C++ 프로그래밍의차이 C: 기능에따라세분화 입력, 계산, 출력기능 각기능을함수로구현 C++: 객체에따라세분화 키패드, LCD, CPU 각객체가가져야할특성에따라클래스로구현 main() input(); compute(); output(); Class Keypad // Keypad 의특성과해야할일구현 ; Class LCD // LCD 의특성과해야할일구현 ; Class CPU // CPU 의특성과해야할일구현 ; Department of Computer Engineering 3

객체지향모델특성 객체지향모델 캡슐화 (Encapsulation) 다형성 (Polymorphism) OOP 상속성 (Inheritance) Department of Computer Engineering 4

Encapsulation 목적 Information hiding 복잡한내부구조숨김 Divide and Conquer 프로그램전체적인관점에서문제를잘게나누고해결 프로그래머실수방지 반드시필요한함수만공개 설명 데이터 (data) 와이를조작하는코드 (code, control, function) 통합 객체안의코드와데이터는비공개 (private) 될수도있고공개 (public) 될수도있음 class 와 struct 의차이? (private vs. public) 예제 ) 오디오 변수 멤버 함수 1 멤버 변수 멤버 함수 2 외부 함수 3 직접변경금지 함수 1 함수 2 함수 3 Department of Computer Engineering 5

Polymorphism 다형성 (polymorphism) 하나의이름으로두가지이상의작동을수행할수있는성질 예제 하나의인터페이스에여러방법지원 abs(), labs(), fabs() abs() 함수이름과연산자이름에사용할수있음 함수오버로딩 (overloading) 연산자오버로딩 Mangling 을통해자연스럽게구현됨 리턴값, 파라미터, _ 등을함수이름에덧붙임 Department of Computer Engineering 6

상속성 (inheritance) Inheritance 클래스가상위클래스의특성을이어받을수있는특성 서로연관있는클래스들을계층적인구조로표현할수있으며, 자식클래스 (child class) 로갈수록일반적인것에서특수한것으로이동 실제업무에서는개발과테스트를거친안정된클래스를사용하다가수정하여야할때그클래스를상속받아서필요한부분만수정 사람 안정된클래스 MFC IS-A 관계 급여 CDocument 교수 학생 수정급여 CMyDoc 학부생 대학원생 Class Diagram Department of Computer Engineering 7

Inheritance ( 계속 ) Base Class, Super Class 또는 Parent Class 상속해주는측 Derived Class 또는 Child Class 상속받는측 상속의유형 단일상속 : 파생클래스가하나의기본클래스를상속 다중상속 : 파생클래스가여러개의기본클래스들을상속 base base1 base1 base2 derived base2 derived derived 단일상속 다중상속 Department of Computer Engineering 8

클래스 관심대상의특성을정의 클래스및인스턴스 Data 및 Control (Function) 통합 사용자정의타입 예제 ) 붕어빵찍는기계 인스턴스 (Instance) 또는객체 (Object) 클래스에의해실체화되어생성된것 클래스만정의해놓고쓰지않는다면효용없음 Notepad.exe라는프로그램을만들어놓고실행한메모장프로그램들 메모리에할당된공간을가지는변수 예제 ) 붕어빵 Department of Computer Engineering 9

클래스및인스턴스예제 Resource (e.g., Memory) Instantiation Union Class (e.g., Point) Instance (e.g., myposition, yourposition) Program OS (e.g., MS-Windows) Department of Computer Engineering 10

C++ 에서의클래스및인스턴스 // Point.h class Point public: // 멤버변수 int m_nx; int m_ny; ; class // 멤버함수 void show(); // main.cpp #include Point.h Point myposition, yourposition; instance Department of Computer Engineering 11

접근지시자 멤버접근지시자 3종류 : public, protected ( 상속 ), private 멤버접근허용지정 클래스의캡슐화를고도화 Default cf) struct class Point private: // 멤버변수 int m_nx; int m_ny; public: // 멤버함수 void show(); ; Department of Computer Engineering 12

내부 클래스내부와외부 변수명또는함수명으로사용가능 외부 void Point::show() cout << X= << m_nx << Y= << m_ny << \n ; 포인터일경우는 -> 인스턴스명 + 점 (.) + 공개된 (public) 변수명또는함수명 void main() Point myposition; myposition.show(); myposition.m_nx = 10; Error Department of Computer Engineering 13

인스턴스들사이의멤버함수공유 클래스의인스턴스생성 메모리공간할당 인스턴스생성 멤버변수는각인스턴스에따로생성됨 멤버함수는각인스턴스들이공유 myposition m_nx m_ny 멤버변수는인스턴스마다메모리할당 yourposition m_nx m_ny Show() 멤버함수는메모리에한번만로딩되고공유 Department of Computer Engineering 14

Static Member Variable & Function 별도의변수선언필요 인스턴스생성 멤버변수는각인스턴스에따로생성됨 정적멤버변수 (static member variable) 는공유됨 ( 메모리도절약 ) 멤버함수는각인스턴스들이공유 Static Member Variable 정적멤버함수 (static member function) 는인스턴스없이호출가능 // Point.h class Point private: // 멤버변수 int m_nx; myposition int m_ny; static int m_ncount; public: // 멤버함수 void show(); ; // Point.cpp int Point::m_nCount = 0; // 또는 int Point::m_nCount = 0; m_nx m_ny m_nx m_ny m_ncount Show() 정적멤버변수는메모리에한번만로딩되고공유 Member Function class Point public: void Dimension(); ; void Point::Dimension() printf("2d\n"); int main(int argc, char* argv[]) Point t; t.dimension(); return 0; Static Member Function class Point public: static void Dimension(); ; void Point::Dimension() printf("2d\n"); int main(int argc, char* argv[]) Point::Dimension(); return 0; Department of Computer Engineering 15

데이터감추기 지역변수 (Local Variable) 함수 ( 블럭 ) 내에서선언된변수 함수시작하는순간에자동으로메모리 ( 스택 ) 할당 함수가종료되면자동으로메모리해제 Variable Local Global Persistent Life Cycle Function Program Run Program Installation for (int i = 0; i < 3; i++) int j = 0; printf("%d ", j++); printf("%d\n", i); printf("%d\n", j); // error C2065: 'j' : undeclared identifier // Output (if possible): 0 0 0 3? 전역변수 (Global Variable) 함수밖에서선언된변수 프로그램시작시할당종료시해제 여러함수에서참조 영속변수 (Persistent Variable) 프로그램이종료되어도해제되지않음 객체지향데이타베이스 int global; void function() int local; void function() static int count = 0; Stack 에공간할당 printf( %d\n, count++); Static Variable Heap 에할당 Department of Computer Engineering 16

전역변수증가 관리어려움 Naming Convention 전역변수의문제점 많은변수이름들은프로그래머에게부담가중및실수유발증가 변경어려움 여러함수에서사용하므로 type 변경, 이름변경, 구조변경시에사용하는모든함수변경필요 가능한한사용하지말것 Department of Computer Engineering 17

클래스의데이터캡슐화 전역변수문제점해결 관련있는데이터묶어서캡슐화 캡슐화된데이터감추기 private, protected 외부에서사용불가능 protected : 상속시 child 클래스에서사용가능 클래스선언시접근지시자를지정하지않으면 default 는 private public 외부에서사용가능 변수는 private 또는 protected 로선언 public getter 및 setter 함수만들어서사용 e.g.) GetPosition(), SetPosition(x, y) Department of Computer Engineering 18

생성자및소멸자함수 클래스의생성자와소멸자 생성자 (Constructor) 클래스이름과같은이름의함수 개체가만들어질때자동으로호출되어주로초기화수행 return 값없음 매개인자가질수있음 여러개의생성자함수가존재할수있음 (Overloading) 상위클래스생성자자동호출 소멸자 (Destructor) 클래스이름앞에 ~ 붙은함수 개체가소멸될때자동으로수행되어주로사용한리소스해제수행 return 값없음 매개인자가질수없음 상위클래스소멸자자동호출 상속이될경우에발생할수있는문제를대비하려면 virtual 사용 ( 슬라이드 p.28 참조 ) class Point // Constructor Point(); Point(int x, int y); // Destructor ~Point(); ; Department of Computer Engineering 19

클래스정의실습 #1 // main.cpp #include <iostream.h> #include "Point.h" void main() Point p; cout << "X=" << p.m_nx << " Y=" << p.m_ny << "\n"; // Point.h class Point public: int m_nx, m_ny; Point(); ; // Point.cpp #include "point.h" Point::Point() m_nx = 0; m_ny = 0; Department of Computer Engineering 20

클래스정의실습 #2 // main.cpp #include <iostream.h> #include "point.h" void ShowCount() if (!Point::GetCount()) cout << "Not Created\n"; else cout << Point::GetCount() << ((Point::GetCount() > 1)? " Objects" : " Object") << " Created\n"; void main() ShowCount(); Point p(7, 7), k; cout << "X = " << p.getx() << ", Y = " << p.gety() << "\n"; ShowCount(); // point.h class Point private: int m_nx, m_ny; static int m_nsharedcount; public: Point() m_nx = 0; m_ny = 0; m_nsharedcount++; ; Point(int x, int y) m_nx = x; m_ny = y; m_nsharedcount++; ; ; int GetX() return m_nx; ; int GetY() return m_ny; ; static int GetCount() return m_nsharedcount; ; // point.cpp #include "point.h" int Point::m_nSharedCount = 0; Department of Computer Engineering 21

연산자오버로딩 (Overloading) 기존연산자의기능을다른방식으로작동하도록재정의 Polymorphism 연산자의유형 단항연산자 (unary operator) : 오퍼랜드 (operand) 가한개로구성되는연산자 ++, --, +, - 전위형 : ++a 후위형 : a++ 이항연산자 (binary operator): 오퍼랜드가두개로구성되는연산자 불가능 +, -, *, /, = a + b., *, ::,?: Department of Computer Engineering 22

// main.cpp #include <iostream.h> #include "point.h" 연산자오버로딩실습 void ShowCount() if (!Point::GetCount()) cout << "Not Created\n"; else cout << Point::GetCount() << ((Point::GetCount() > 1)? " Objects" : " Object") << " Created\n"; void main() ShowCount(); Point p(7, 7), k; ShowCount(); cout << "p: X = " << p.getx() << ", Y = " << p.gety() << "\n"; cout << "k: X = " << k.getx() << ", Y = " << k.gety() << "\n"; ++k; // 단항연산자전위형 cout << "k: X = " << k.getx() << ", Y = " << k.gety() << "\n"; k++; // 단항연산자후위형 cout << "k: X = " << k.getx() << ", Y = " << k.gety() << "\n"; k = k + p; // 이항연산자 // point.cpp // k += p; // 이항연산자 #include "point.h" cout << "k: X = " << k.getx() << ", Y = " << k.gety() << "\n"; int Point::m_nSharedCount = 0; // point.h class Point private: int m_nx, m_ny; static int m_nsharedcount; public: Point() m_nx = 0; m_ny = 0; m_nsharedcount++; ; Point(int x, int y) m_nx = x; m_ny = y; m_nsharedcount++; ; ; int GetX() return m_nx; ; int GetY() return m_ny; ; static int GetCount() return m_nsharedcount; ; Point Point::operator+(Point &point) Point temp; temp.m_nx = m_nx + point.m_nx; temp.m_ny = m_ny + point.m_ny; return temp; Point operator++() return Point(++m_nX, m_ny); ; // 전위형 (++a) Point operator++(int) return Point(m_nX, ++m_ny); ; // 후위형 (a++) Point operator+(point &point); Department of Computer Engineering 23

상속성및함수 Overriding 기반클래스에서상속받은멤버함수의기능대치 상속받은멤버함수의 Prototype 과똑같이재선언하여함수를작성함 Overriding 기반클래스의같은이름함수가먼저호출되지않음 기반클래스의같은이름함수를 explicitly 호출가능 생성자, 소멸자는? class Point public: void show() cout << Point\n ;; ; class Point3D : public Point public: void show() cout << Point3D - ; Point::show(); ; ; Department of Computer Engineering 24

함수의바인딩 (binding) 가상함수 함수호출부분에함수가위치한메모리번지를연결시키는것 가상함수 정적바인딩 : 컴파일단계에서수행될함수의번지가결정됨 동적바인딩 : 프로그램실행시수행될함수의번지가결정됨 기반클래스의함수선언에 virtual 키워드추가 파생클래스에서그함수오버라이딩 run-time polymorphism 지원 기반클래스포인터변수에파생클래스의객체를대입 객체의타입에따라알맞은멤버함수 ( 파생클래스의함수 ) 수행 Department of Computer Engineering 25

가상함수 가상함수사용 #include <iostream.h> class base1 public: virtual void show() cout << base1 << endl; ; class derived1 : public base1 public: void show() cout << derived1 << endl; ; Void main() base1 *p; base1 b1; derived1 d1; p = &b1; p->show(); p = &d1; p->show(); P 의타입에맞는 show() 함수가수행됨 (run-time type information 관리 ) Department of Computer Engineering 26

가상함수실습 struct Point //class Point int x, y; void show(); ; //virtual void show(); void Point::show() printf("show\n"); struct Point3D : public Point int z; void show(); ; void Point3D::show() printf("%d, %d, %d\n", x, y, z); int main(int argc, char* argv[]) Point3D t; t.x = 10; t.y = 20; t.z = 30; t.show(); Point *p = &t; p->show(); return 0; class 로변경하여에러확인 함수갖을수있습니다. 가상함수로변경하여결과확인 상속도됩니다. Department of Computer Engineering 27

소멸자의가상함수실습 소멸자에 virtual 을붙여주어야상위클래스포인터로레퍼런스된객체도상위소멸자호출됨 Department of Computer Engineering 28

코드가통째로복사 점프아님 Inline 함수 빈번히호출되는함수를호출처리없이바로실행 함수크기가매우작은경우 장점 vs. 단점 수행속도 vs. 실행파일크기 클래스헤더파일에함수선언 & 구현 class Point int GetCount() return m_nsharedcount; ; ; 클래스소스파일에구현시함수앞에 inline 명시 inline int Point::GetCount() return m_nsharedcount; Department of Computer Engineering 29

Call by Reference Reference 변수의복사본을만들지않고변수의포인터를넘김 void swap(int &a, int &b) int temp = a; a = b; b = temp; ; 가능한사용하지말것 Department of Computer Engineering 30

Template 임의의데이터타입으로교체가능하도록 클래스정의시에는타입을지정하지않고 변수선언시타입지정 template <class type> class Point private: type m_x, m_y; public: void SetPosition(type x, type y); ; template <class type> void Point<type>::SetPosition(type x, type y) m_x = x; m_y = y; ; Point<double> dposition; Point<int> nposition; Department of Computer Engineering 31

Default Parameter Value 매개변수의디폴트값지정가능 class Point 적어도한개는 public: 디폴트값이 int m_nx, m_ny; 없어야성공 Point() m_nx = 0; m_ny = 0; ; Point(int x = 10, int y =20) m_nx = x; m_ny = y; ; ; // warning C4520: 'Point' : multiple default constructors specified Point p; // error C2668: 'Point::Point' : ambiguous call to overloaded function Department of Computer Engineering 32

this Pointer 자기자신의객체를가리키는포인터 다른클래스에자기자신을매개변수로넘겨줘야할때사용 class Where public: int data; void PrintPointer(); ; void Where::PrintPointer() cout << 주소 : << this << \n ; void main() Where a,b,c; a.printpointer(); b.printpointer(); c.printpointer(); Department of Computer Engineering 33

const Variable & Function 프로그래머의실수방지 Read-only Variable const duble pi = 3.141592; pi = 10; // 에러 Read-only Function class Count int GetCount() const return m_ncount; ; ; Department of Computer Engineering 34

Summary Object Oriented Programming Encapsulation Polymorphism Inheritance Class and Instance Constructor and Destructor Static Member Variable and Function Function and Operator Overloading Function Overriding Virtual Function Inline Function Template Default Parameter Value this Pointer const Variable and Function Department of Computer Engineering 35