제4장 클래스와 객체 객체 지향 기법을 이해한다. 클래스를 작성할 수 있다. 클래스에서 객체를 생성할 수 있다.

Slides:



Advertisements
Similar presentations
3. 메소드와 변수 SCJP 자격증 프로젝트 발표자 : 최선웅. 1. 메 소 드 개 념 2. 메 소 드 양 식 3. 메 소 드 변 수 4. 메 소 드 예 제 5. 참 고 문 헌 / 자 료 목 차.
Advertisements

© 2010 인피니티북스 All rights reserved 제 7 장 클래스의 활용 C++ Espresso.
7 장 프렌드와 연산자 중복 1 명품 C++. 친구란 ? 2 우리 집 냉장고 내 침대 우리 집 TV 우리 집 식탁 친구 친구 ? 내 가족의 일원은 아니지만 내 가족과 동일한 권한을 가진 일원으로 인정받은 사람.
목 차 C# 언어 특징 .NET 프레임워크 C# 콘솔 프로그램 C# 윈도우 프로그램 실습 프로그래밍세미나 2.
어서와 Java는 처음이지! 제5장 클래스, 객체, 메소드.
어서와 Java는 처음이지! 제20장 실전프로젝트 #2.
5. 접근 제한자의 이해 SCJP 자격증 프로젝트 발표자 : 노효진.
01_ 가상 함수를 사용한 다형성의 구현 02_ 오버라이딩
명품 C++ 프로그래밍 3장. 클래스와 객체.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
ㅎㅎ C++ 프로그래밍의 첫 걸음 C++로 프로그래밍한다는 것의 의미 세상에서 가장 간단한 C++ 프로그램
ㅎㅎ C++ 프로그래밍의 첫 걸음 C++ 프로그래밍 기초 : 객체지향의 시작 C++로 프로그래밍한다는 것의 의미
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
최윤정 Java 프로그래밍 클래스 상속 최윤정
5장. 객체지향과 클래스.
제6장 객체배열과 벡터 객체 배열을 이해한다. 벡터(vector) 클래스를 사용할 수 있다.
C++ Exspresso 제5장 클래스의 기초.
8. 객체와 클래스 (기본).
11장 구조체와 열거형 구조체의 정의 구조체 변수의 선언 구조체 초기화 및 사용 구조체 재정의 포인터를 이용해서 구조체 사용
윤 홍 란 다형성과 가상 함수 윤 홍 란
제12장 다형성과 가상함수 다형성의 개념을 이해한다. 상향 형변환의 개념을 이해한다. 가상 함수의 개념을 이해한다.
C++ Espresso 제9장 다형성.
명품 C++ 프로그래밍 3장. 클래스와 객체.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
C++ Espresso 제6장 생성자와 소멸자.
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 03. 클래스의 기본.
명품 C++ 7장 프렌드와 연산자 중복.
1. C++ 시작하기.
C++ Programming: Sample Programs
정적 멤버 변수/정적 멤버 함수 - friend 함수/클래스 template
C++ Espresso 제12장 템플릿.
두근두근 파이썬 수업 13장 객체란 무엇인가요?.
두근두근 파이썬 수업 13장 객체란 무엇인가요?.
제7장 클래스와 객체.
패키지와 접근 제어 패키지에 대하여 접근 제어에 대하여.
Java 6장. 클래스 : 속성 public class SumTest {
14. 예외처리.
13. 연산자 오버로딩.
제14장 예외처리와 템플릿 예외 처리의 개요를 학습한다. 예외 처리를 적용할 수 있다. 템플릿의 개념을 이해한다.
7장 인터페이스와 추상 클래스.
Method & library.
제5장 생성자와 접근제어 객체 지향 기법을 이해한다. 클래스를 작성할 수 있다. 클래스에서 객체를 생성할 수 있다.
Chapter 11 객체지향 프로그래밍의 기초 01 클래스 02 생성자 03 인스턴스 변수와 클래스 변수 예제 모음 요약
명품 C++ 9장 가상 함수와 추상 클래스.
가상함수와 추상 클래스.
C++ Espresso 제8장 객체 지향 소개.
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
20장. 객체지향 프로그래밍 01_ 객체지향 프로그래밍의 시작.
제 4장. 객체 지향 프로그래밍 시작하기 학기 프로그래밍언어및실습 (C++).
Lab 8 Guide: 멀티스레딩 예제 2 * Critical Section을 이용한 멀티스레딩 동기화 (교재 15장, 쪽)
Power Java 제11장 상속.
제8장 포인터와 동적객체 생성 포인터의 개념을 이해한다. 포인터와 관련된 연산을 이해한다.
JA A V W. 06.
12. 상속 : 고급.
객체기반 SW설계 팀활동지 4.
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
중복 멤버의 처리 조 병 규 한 국 교 통 대 학 교 SQ Lab..
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
Lecture 04 객체지향 페러다임 Kwang-Man Ko
3. 모듈 (5장. 모듈).
서브클래스 조 병 규 한 국 교 통 대 학 교 SQ Lab..
Static과 const 선언 조 병 규 한 국 교 통 대 학 교 SQ Lab..
.Net FrameWork for Web2.0 한석수
실습과제 1번 /* 1. 멤버 변수로 반경 radius를 갖고, 그 값을 모니터에 출력하는
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
상속 (Inheritance) private 전용부분 전용부분 공용부분 공용부분 public 기본 클래스
7 생성자 함수.
6 객체.
Presentation transcript:

제4장 클래스와 객체 객체 지향 기법을 이해한다. 클래스를 작성할 수 있다. 클래스에서 객체를 생성할 수 있다. 생성자를 이용하여 객체를 초기화할 수 있다. 접근자와 설정자를 사용할 수 있다.

이번 장에서 만들어볼 프로그램

객체지향이란? 객체 지향 프로그래밍(OOP: object-oriented programming)은 우리가 살고 있는 실제 세계가 객체 (object)들로 구성되어 있는 것과 비슷하게, 소프트웨어도 객체로 구성하는 방법이다.

객체와 메시지 객체들은 메시지를 주고 받으면서 상호작용한다.

절차 지향과 객체 지향

절차지향 절차 지향 프로그래밍(procedural programming)은 프 로시저(procedure)를 기반으로 하는 프로그래밍 방법이 다. 프로시져는 일반적으로 함수를 의미한다. 절차 지향 프로그래밍에서 전체 프로그램은 함수들의 집 합으로 이루어진다.

절차지향의 문제점

객체지향 프로그래밍

객체의 구성 객체는 상태와 동작을 가지고 있다. 객체의 상태(state)는 객체의 속성이다. 객체의 동작(behavior)은 객체가 취할 수 있는 동작이다.

멤버 변수와 멤버 함수

클래스=객체의 설계도 객체 지향 소프트웨어에서도 같은 객체들이 여러 개 필요 한 경우도 있다. 이러한 객체들은 모두 하나의 설계도로 만들어진다. 바로 이 설계도를 클래스(class)라고 한다.

클래스 작성하기

클래스 작성의 예

접근지정자 private 멤버는 클래스 안에서만 접근(사용)될 수 있다. protected 멤버는 클래스 안과 상속된 클래스에서 접근이 가능하다(상속은 아직 학습하지 않았다). public 멤버는 어디서나 접근이 가능하다.

객체 생성하기

객체의 멤버 접근 멤버에 접근하기 위해서는 도트(.) 연산자를 사용한다.

예제 #include <iostream> using namespace std; class Circle { public: int radius; // 반지름 string color; // 색상 double calcArea() { return 3.14*radius*radius; } }; int main() { Circle obj; obj.radius = 100; obj.color = "blue"; cout << "원의 면적=" << obj.calcArea() << "\n"; return 0;

하나의 클래스로 많은 객체 생성 가능

여러 개의 객체 생성 예제 int main() { Circle pizza1, pizza2; pizza1.radius = 100; pizza1.color = "yellow"; cout << "피자의 면적=" << pizza1.calcArea() << "\n"; pizza2.radius = 200; pizza2.color = "white"; cout << "피자의 면적=" << pizza2.calcArea() << "\n"; return 0; }

각 객체 상태 각 객체의 멤버 변수 값은 서로 다르다.

Lab: 사각형 클래스 아래 클래스를 가지고 하나의 객체를 생성하는 프로그램 을 작성해보자. class Rectangle { public: int width, height; int calcArea() { return width*height; } };

solution #include <iostream> using namespace std; class Rectangle { public: int width, height; int calcArea() { return width*height; } }; int main() { Rectangle obj; obj.width = 3; obj.height = 4; int area = obj.calcArea(); cout << "사각형의 넒이: " << area<<endl; return 0;

Lab: 원 객체 그리기 #include <windows.h> #include <stdio.h> int main() { HDC hdc = GetWindowDC(GetForegroundWindow()); Ellipse(hdc, 100, 100, 180, 180); }

solution #include <iostream> #include <windows.h> using namespace std; class Circle { public: int x, y, radius; // 원의 중심점과 반지름 string color; // 원의 색상 double calcArea() { // 원의 면적을 계산하는 함수 return 3.14*radius*radius; } void draw() { // 원을 화면에 그리는 함수 HDC hdc = GetWindowDC(GetForegroundWindow()); Ellipse(hdc, x - radius, y - radius, x + radius, y + radius); };

Lab: Car 클래스 작성

solution #include <iostream> #include <string> using namespace std; class Car { public: // 멤버 변수 선언 int speed; // 속도 int gear; // 기어 string color; // 색상 // 멤버 함수 선언 void speedUp() { // 속도 증가 멤버 함수 speed += 10; } void speedDown() { // 속도 감소 멤버 함수 speed -= 10; };

solution int main() { Car myCar; myCar.speed = 100; myCar.gear = 3; myCar.color = "red"; myCar.speedUp(); myCar.speedDown(); return 0; }

멤버 함수 중복 정의 #include <iostream> #include <string> using namespace std; class PrintData { public: void print(int i) { cout << i << endl; } void print(double f) { cout << f << endl; } void print(string s = "No Data!") { cout << s << endl; } }; int main() { PrintData obj; obj.print(1); obj.print(3.14); obj.print("C++14 is cool."); obj.print(); return 0; }

실행 결과

클래스의 인터페이스와 구현의 분리 복잡한 클래스인 경우에는 멤버 함수를 클래스 외부에서 정의 복잡한 클래스인 경우에는 멤버 함수를 클래스 외부에서 정의 #include <iostream> using namespace std; class Circle { public: double calcArea(); int radius; // 반지름 string color; // 색상 };

클래스의 인터페이스와 구현의 분리 // 클래스 외부에서 멤버 함수들이 정의된다. double Circle::calcArea() { return 3.14*radius*radius; } int main() { Circle c; c.radius = 10; cout << c.calcArea() << endl; return 0;

이름 공간 이름 공간(name space)는 식별자 (자료형, 함수, 변수 등 의 이름)의 영역 이름 공간은 코드를 논리적 그룹으로 구성하고 특히 코드 에 여러 라이브러리가 포함되어 있을 때 발생할 수 있는 이름 충돌을 방지하는 데 사용된다. using namespace std;

using 문장을 사용하지 않으면 #include <iostream> class Circle { public: double calcArea(); int radius; // 반지름 std::string color; // 색상 }; double Circle::calcArea() { return 3.14*radius*radius; } int main() { Circle c; c.radius = 10; std::cout << c.calcArea() << std::endl; return 0;

클래스의 선언과 클래스의 정의 분리

car.h #include <iostream> #include <string> using namespace std; class Car { int speed; //속도 int gear; //기어 string color; //색상 public: int getSpeed(); void setSpeed(int s); };

car.cpp #include "car.h" int Car::getSpeed() { return speed; } void Car::setSpeed(int s) speed = s;

main.cpp #include "car.h" using namespace std; int main() { Car myCar; myCar.setSpeed(80); cout << "현재 속도는 " << myCar.getSpeed() << endl; return 0; }

객체 지향의 개념들 캡슐화 정보은닉 상속 다형성

캡슐화

정보은닉

상속

다형성

Lab: 원들의 경주 두 대의 원을 생성한 후에 난수를 발생하여 원들을 움직 인다. 원을 화면에 그리는 draw() 함수와 난수를 발생하여 원을 움직이는 함수 move()를 클래스에 추가한다.

solution #include <iostream> #include <windows.h> using namespace std; class Circle { public: void init(int xval, int yval, int r); void draw(); void move(); private: int x, y, radius; }; // 아직 생성자를 학습하지 않았기 때문에 init() 함수 사용 void Circle::init(int xval, int yval, int r) { x = xval; y = yval; radius = r; }

solution void Circle::draw() { HDC hdc = GetWindowDC(GetForegroundWindow()); Ellipse(hdc, x - radius, y - radius, x + radius, y + radius); } void Circle::move() { x += rand() % 50; int main() { Circle c1; Circle c2; c1.init(100, 100, 50); c2.init(100, 200, 40); for (int i = 0; i < 20; i++) { c1.move(); c1.draw(); c2.move(); c2.draw(); Sleep(1000); return 0;

UML 객체 지향 프로그래밍에서도 프로그래머들은 애플리케 이션을 구성하는 클래스들 간의 관계를 그리기 위하여 클 래스 다이어그램(class diagram)을 사용한다. 가장 대표 적인 클래스 다이어그램 표기법은 UML(Unified Modeling Language)이다.

UML

UML

UML의 예

Q & A