8. 객체와 클래스 (기본).

Slides:



Advertisements
Similar presentations
3. C++와 객체지향 C++ 코딩 방법 객체 단위로 2 개의 파일 인터페이스 파일 구현파일
Advertisements

Vision System Lab, Sang-Hun Han
명품 C++ 프로그래밍 3장. 클래스와 객체.
명품 C++ 8장 상속.
명품 C++ 4장. 객체 포인터와 객체 배열, 객체의 동적 생성.
Power C++ 제6장 포인터와 문자열.
C++ Espresso 제3장 배열과 포인터.
C++ Espresso 제3장 배열과 포인터.
C++ Espresso 제1장 기초 사항.
C++ Espresso 제2장 제어문과 함수.
강좌명 : C++프로그래밍 (C++ Programming)
제6장 객체배열과 벡터 객체 배열을 이해한다. 벡터(vector) 클래스를 사용할 수 있다.
명품 C++ 13장 예외 처리와 C 언어와의 링크 지정.
5장. 리스트 리스트 학습목표 목록이나 도표처럼 여러 데이터를 관리할 수 있는 자료형을 추상화
C++ Exspresso 제5장 클래스의 기초.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
C++ Espresso 제9장 다형성.
10장 템플릿과 표준 템플릿 라이브러리(STL)
배열, 포인터, 참조 배열은 같은 형을 가지는 변수들의 묶음이다..
명품 C++ 8장 상속.
C++ Espresso 제6장 생성자와 소멸자.
Game Programming 03 - Tools of trade
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 03. 클래스의 기본.
상속이란? - 기반클래스로부터 다른 클래스를 파생하는 법 protected란? 가상함수 (virtual function)
7장 클래스.
명품 C++ 7장 프렌드와 연산자 중복.
18장. 헤더 파일과 구현 파일 01_ 헤더 파일과 구현 파일의 사용.
14장. 함수 1 01_ 함수의 기본 02_ 인자의 전달.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
C++ Programming: Sample Programs
C ++ 프로그래밍 시작.
정적 멤버 변수/정적 멤버 함수 - friend 함수/클래스 template
C++ Programming: chapter 7 – inheritence
스택(Stack) 김진수
14. 예외처리.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
13. 연산자 오버로딩.
Chapter 3 클래스. 최호성.
제5장 생성자와 접근제어 객체 지향 기법을 이해한다. 클래스를 작성할 수 있다. 클래스에서 객체를 생성할 수 있다.
C언어 프로그래밍의 이해 Ch13. 선행처리기와 주석문.
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
어서와 Java는 처음이지! 제9장 인터페이스, 패키지.
03. 안드로이드를 위한 Java 문법 제목. 03. 안드로이드를 위한 Java 문법 제목.
타입, 연산자 Chapter 5, 6 Kum Deuk Kyu , Ph. D. Spring 2015
가상함수와 추상 클래스.
메소드와 클래스 정의 및 문제 풀이 Method and Class Define and Problem Solve
Chapter 1 C와는 다른 C++. 최호성.
제2장 제어구조와 배열 if-else 문에 대하여 학습한다. 중첩 if-else 문에 대하여 학습한다.
4. 고급변수 사용 : 포인터와 관련하여 메모리 바라보기
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
Java IT응용시스템공학과 김형진 교수 5장. 객체지향 개념 public class SumTest {
3장. 클래스의 기본.
루프와 카운트 Looping and counting
멤버 함수인 operator+()가 실행, 또는 전역 함수인 operator+()가 실행 Point p3 = p1+p2; 에서
제8장 포인터와 동적객체 생성 포인터의 개념을 이해한다. 포인터와 관련된 연산을 이해한다.
조 병 규 Software Quality Lab. 한 국 교 통 대 학 교
A Basic of C++.
5. 논리적 자료표현 : 구조체.
3장,4장 발표 서정우.
03. 메모리 관리 C++ 프로그램에서 다룰 수 있는 메모리의 종류
C++ Espresso 제13장 입출력과 파일처리.
포인터와 배열 조 병 규 한 국 교 통 대 학 교 SQ Lab..
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
10장 템플릿과 표준 템플릿 라이브러리(STL)
컴퓨터 프로그래밍 기초 - 11th : 파일 입출력 및 구조체 -
Java 5장. 객체지향 개념 public class SumTest {
캡슐화 (Encapsulation) 두원공과대학 소프트웨어개발과 이 원 주.
실습과제 1번 /* 1. 멤버 변수로 반경 radius를 갖고, 그 값을 모니터에 출력하는
C.
C++ 언어의 특징
Presentation transcript:

8. 객체와 클래스 (기본)

차례 객체지향 프로그래밍 시작을 위해 객체지향 프로그래밍 객체지향의 특징

객체지향 프로그래밍 시작을 위해 순차적 프로그래밍 구조적 프로그래밍 객체지향 프로그래밍 문제를 하향식으로 여러 개의 기능으로 나누어 구현  함수 객체지향 프로그래밍 사람의 실 세계를 컴퓨터 프로그래밍으로 옮겨놓은 형태로 추상적 개념이 있고, 실체화된 객체가 프로그램 실행을 담당한다.

객체지향 프로그래밍 문제 분석의 포커스 문제를 “누가 무엇으로 어떻게 하는가”의 질문에 맞춰 대답할 수 있어야 함 누가  실제 문제를 풀어나가는 주체 : 객체 무엇  객체 연산에 필요한 자료 : 멤버 변수 어떻게  객체 연산 : 멤버 함수

객체와 클래스 객체와 클래스 클래스란 실체인 객체를 만들기 위한 틀!! 클래스 : 추상적 개념체 객체 : 프로그램의 동작 주체인 실체 클래스란 실체인 객체를 만들기 위한 틀!! 클래스 객체 사람 나, 내친구, 옆집아줌마 컵 내가 사용하는 컵, 갑돌이의 컵 자동차 건물 앞에 세워진 자동차, 내 자동차 운동화 내 친구의 하얀색 운동화

클래스 정의 1 프로그램 코드에서의 작성 순서 설계에서의 작성 순서 클래스 클래스 정의  객체 생성 문제 분석 객체 식별  클래스 정의 클래스 멤버변수 : 상태, 처리 대상 등의 정보 멤버함수 : 자료 처리 등의 동작을 수행

클래스 정의 2 클래스 선언 class 클래스이름 { 클래스 멤버; //멤버 변수와 멤버 함수 }; 문제 : “하나의 정수를 변수에 저장하고 해당 변수를 화면에 출력하는 프로그램”을 객체지향 프로그래밍으로 작성하기 누가  값을 저장하고 출력하는 객체 무엇을  정수 값 어떻게  화면에 출력하기 class IntSample //클래스 이름 { void ShowScore(); //출력 함수 int Score; //정수 저장할 변수 };

클래스 정의 3 클래스 멤버 함수 정의 멤버 함수 정의에서 동일 클래스의 멤버 변수는 직접 접근하여 참조 가능함 자료형 클래스이름::멤버함수(매개변수) { 함수 내용; } void IntSample :: ShowScore( ) { cout << “점수 : “ << Score << endl; //Score는 IntSample 멤버변수이므로 별도의 선언 없이 사용 가능함 }

클래스 정의 4 선언된 클래스를 통해 객체 생성 생성된 객체는 클래스에 정의된 멤버 변수와 멤버 함수를 참조 변수는 “선언한다”  값을 저장하는 공간 객체는 “생성한다”  동작하는 실체

코딩으로 살펴본 클래스와 객체 일반 자료형 구조체 클래스 정의 형태 이미 정의되어 있음 사용자가 구조체형을 정의 사용자가 클래스를 정의 내용 int, float, double, char 등 여러 자료형 멤버를 포함할 수 있음 여러 자료형 멤버 + 여러 기능을 갖는 함수 사용 형태 자료형의 변수를 선언 자료형 변수이름; 예) int a; 정의한 구조체형 변수 선언 구조체형 변수이름; 예) typedef struct { char name[30]; int age; } PERSON; PERSON b; 정의한 클래스의 객체 생성 클래스이름 객체이름; class SamClass …………. }; SamClass obj; 비고 변수 하나에 하나의 자료 저장 하나의 변수에 각 멤버 별로 자료 저장 자료를 저장할 수 있는 변수와 기능을 수행하는 함수가 포함됨

멤버 접근 속성 클래스 멤버의 접근 속성 클래스 멤버 참조 연산자 private : 기본 접근 속성, 같은 클래스 멤버 내에서만 접근 허용 protected : 클래스 상속에서 사용됨 public : 모든 위치에서 접근 허용 클래스 멤버 참조 연산자 점(.)

#include <iostream> using namespace std; class IntSample { void ShowScore(); int Score; }; void IntSample::ShowScore() { cout << "점수: " << Score << endl; }   int main() IntSample Obj; //객체 생성 Obj.Score=100; //객체 Obj의 멤버 변수 Score에 값 할당하기  에러 Obj.ShowScore(); //객체 Obj의 멤버 함수 ShowScore() 호출하기  에러 return 0; 멤버 접근속성을 명시하지 않으면 private로 간주됨!!!! 클래스 선언 클래스 멤버 함수 정의 ShowScore( ) 멤버 함수는 Score와 동일한 IntSample 클래스의 멤버이므로 멤버 변수를 직접 참조 가능함!! main( ) 함수는 IntSample 클래스 내가 아닌 클래스 밖이므로 해당 멤버에 직접 참조할 수 없음!!! 에러 메시지 : error C2248: 'IntSample::Score': private 멤버('IntSample' 클래스에서 선언)에 액세스할 수 없습니다. error C2248: 'IntSample::ShowScore': private 멤버('IntSample' 클래스에서 선언)에 액세스할 수 없습니다.

일반적으로 정의되는 형태:멤버 접근 속성 기본 멤버 접근 속성이 private인 이유 생성된 객체 정보는 접근 권한이 있는 경우에만 참조케 함을 목적으로 함  보안성 고려 private 멤버는 public 멤버 함수를 통해 접근토록 클래스를 설계함  직접적 접근 허용 방지 일반적으로 멤버 변수는 private, 멤버 함수는 public으로 하며, 클래스 선언에서 멤버 접근 속성이 public  protected  private 순으로 코딩

#include <iostream> using namespace std;   class IntSample { public : void ShowScore(); void setScore(const int s); int getScore(); private : int Score; }; void IntSample::ShowScore() cout << "점수: " << Score << endl; } void IntSample::setScore(const int s) Score=s; int IntSample::getScore() { return Score; }   int main() IntSample Obj; Obj.setScore(100); cout << "점수: " << Obj.getScore() << endl; return 0;

프로그램 코딩에서 클래스 선언은 헤더 파일, 정의는 소스 파일 객체 생성 및 테스트는 main( ) 함수에서 실행 //IntSample.h #ifndef _INTSAMPLE_H_ #define _INTSAMPLE_H_   #include <iostream> using namespace std; class IntSample { public : void ShowScore(); void setScore(const int s); int getScore(); private : int Score; }; #else #endif //IntSample.cpp #include "IntSample.h"   void IntSample::ShowScore() { cout << "점수: " << Score << endl; } void IntSample::setScore(const int s) Score=s; int IntSample::getScore() return Score; //IntSample_main.cpp #include "IntSample.h"   int main() { IntSample Obj; Obj.setScore(100); cout << "점수: " << Obj.getScore() << endl; return 0; }

실습 1 문제 : 키와 몸무게를 입력받아 표준 몸무게를 계산하여 “저체중”, “정상체중”, “과체중”인가를 표시하자. 문제를 “누가 무엇을 가지고 어떻게 동작하는가”의 시각으로 바라보자. 먼저 생성될 객체의 작업 대상인 “무엇”을 식별해 보자. 작업 대상이 되는 항목은 키와 몸무게 이다. 그리고 어떻게 동작하는가는 먼저 키와 몸무게를 외부에서 동작하는 객체에 전달받을 수 있어야 하고, 키를 이용해서 표준 몸무게를 계산할 수 있어야 한다. 또한 표준 몸무게와 전달받은 몸무게를 비교하여 체중의 상태를 판단해서 객체 밖으로 전달할 수 있어야 한다. 멤버 변수 키 : 소수점 이하 자리를 다룰 수 있도록 배정도형으로 하자. 몸무게 : 소수점 이하 자리를 다룰 수 있도록 배정도형으로 하자. 체중 상태 : 체중 상태는 표준 몸무게 계산 후 일정한 처리에 의해 산출되는 정보로써 표준 몸무게 자체를 멤버 변수로 해도 된다. 그러나 이번에는 체중 상태를 멤버 변수로 하겠다. -1은 저체중을, 0은 정상체중, 1은 과체중으로 표시하자. double height, weight; int WeightStatus;

멤버 변수 키 : 소수점 이하 자리를 다룰 수 있도록 배정도형으로 하자. 몸무게 : 소수점 이하 자리를 다룰 수 있도록 배정도형으로 하자. 체중 상태 : 체중 상태는 표준 몸무게 계산 후 일정한 처리에 의해 산출되는 정보로써 표준 몸무게 자체를 멤버 변수로 해도 된다. 그러나 이번에는 체중 상태를 멤버 변수로 하겠다. -1은 저체중을, 0은 정상체중, 1은 과체중으로 표시하자. 멤버 함수 키를 외부에서 객체로 전달하는 기능 : 매개변수로 키 값을 전달받음 몸무게를 외부에서 객체로 전달하는 기능 : 매개변수로 몸무게를 전달받음 키를 객체 외부로 전달하는 기능 : 함수의 반환값으로 외부에 전달함 몸무게를 객체 외부로 전달하는 기능 : 함수의 반환값으로 외부에 전달함 표준 몸무게 산출해서 체중 상태를 구하는 기능 체중 상태를 객체 외부로 전달하는 기능 : 함수의 반환값으로 외부에 전달함 void setHeight(const double h); void setWeight(const double w); double getHeight(); double getWeight(); int StdWeight(); int getWeightStatus();

실습 2 문제 : 다음은 수업에 등록한 학생을 관리하는 클래스이다. 주어진 상황에 맞게 클래스를 선언, 정의해서 테스트 해보자. 출력 형태 : 과정명 입력 : C++ 프로그램 수강학생 이름 입력 : 이름 : 박진영 계속입력하시겠습니까? (y/n) y 이름 : 김동현 이름 : 김소연 이름 : 김창민 이름 : 황청자 계속입력하시겠습니까? (y/n) n   수강학생 명단 : 박진영 김동현 김소연 김창민 황청자 총 수강학생 수 : 5명

누가  수업에 등록한 학생 관리 객체 무엇을  과정명, 수업에 등록한 학생 명단, 수업에 등록한 총 학생 수 어떻게  과정명을 외부에서 전달받아 저장, 수강생 이름을 외부에서 전달받아 수강생 목록에 저장, 수강생 목록에 총 수 계산, 수강생 목록을 외부에 전달하기, 총 수강생 수를 외부에 전달하기 클래스 이름 : Course 멤버 변수 과정명 수강학생 명단 총 수강학생 수 멤버 함수 과정명을 객체 내부로 전달하는 함수 한 명의 수강학생 이름을 객체 내부로 전달하는 함수 수강학생 이름 전체를 객체 외부로 전달하는 함수 총 수강학생 수를 객체 외부로 전달하는 함수 소스 8-4 (ch08_course.h) 소스 8-5 (ch08_course.cpp) 소스 8-6 (ch08_02.cpp)

객체지향의 특징 추상화 (Abstraction) 캡슐화 (Encapsulation) 상속 (Inheritance) 다형성 (Polymorphism)