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

Slides:



Advertisements
Similar presentations
어서와 Java는 처음이지! 제3장선택과 반복.
Advertisements

3. C++와 객체지향 C++ 코딩 방법 객체 단위로 2 개의 파일 인터페이스 파일 구현파일
01_ 가상 함수를 사용한 다형성의 구현 02_ 오버라이딩
명품 C++ 프로그래밍 3장. 클래스와 객체.
명품 C++ 8장 상속.
명품 C++ 4장. 객체 포인터와 객체 배열, 객체의 동적 생성.
Power C++ 제6장 포인터와 문자열.
C++ Espresso 제3장 배열과 포인터.
C++ Espresso 제3장 배열과 포인터.
C++ Espresso 제1장 기초 사항.
C++ Espresso 제2장 제어문과 함수.
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
강좌명 : C++프로그래밍 (C++ Programming)
실전 프로젝트 2 : 숫자야구 숫자 야구를 구현해보자.
제6장 객체배열과 벡터 객체 배열을 이해한다. 벡터(vector) 클래스를 사용할 수 있다.
명품 C++ 13장 예외 처리와 C 언어와의 링크 지정.
C++ Exspresso 제5장 클래스의 기초.
8. 객체와 클래스 (기본).
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
Power Java 제4장 자바 프로그래밍 기초.
제12장 다형성과 가상함수 다형성의 개념을 이해한다. 상향 형변환의 개념을 이해한다. 가상 함수의 개념을 이해한다.
C++ Espresso 제9장 다형성.
명품 C++ 프로그래밍 3장. 클래스와 객체.
10장 템플릿과 표준 템플릿 라이브러리(STL)
배열, 포인터, 참조 배열은 같은 형을 가지는 변수들의 묶음이다..
명품 C++ 8장 상속.
C++ Espresso 제6장 생성자와 소멸자.
Game Programming 03 - Tools of trade
명품 JAVA Essential.
상속이란? - 기반클래스로부터 다른 클래스를 파생하는 법 protected란? 가상함수 (virtual function)
제13장 파일처리 스트림의 개념을 이해한다. 객체 지향적인 방법을 사용하여 파일 입출력을 할 수 있다.
7장 클래스.
다중 상속 - 가상 상속 추상 자료형 순수 가상함수
명품 C++ 7장 프렌드와 연산자 중복.
18장. 헤더 파일과 구현 파일 01_ 헤더 파일과 구현 파일의 사용.
C ++ 프로그래밍 시작.
C++ Programming: chapter 7 – inheritence
제4장 클래스와 객체 객체 지향 기법을 이해한다. 클래스를 작성할 수 있다. 클래스에서 객체를 생성할 수 있다.
스택(Stack) 김진수
17장. 문자열 01_ 문자열 사용의 기본 02_ 문자열의 사용.
명품 C++ 프로그래밍 1장. C++ 시작.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
13. 연산자 오버로딩.
Chapter 3 클래스. 최호성.
제14장 예외처리와 템플릿 예외 처리의 개요를 학습한다. 예외 처리를 적용할 수 있다. 템플릿의 개념을 이해한다.
명품 C++ 9장 가상 함수와 추상 클래스.
가상함수와 추상 클래스.
Chapter 1 C와는 다른 C++. 최호성.
제2장 제어구조와 배열 if-else 문에 대하여 학습한다. 중첩 if-else 문에 대하여 학습한다.
제 12장. 사용자 정의형으로서의 클래스 학기 프로그래밍언어및실습 (C++).
4. 고급변수 사용 : 포인터와 관련하여 메모리 바라보기
멤버 함수인 operator+()가 실행, 또는 전역 함수인 operator+()가 실행 Point p3 = p1+p2; 에서
멤버함수 중첩( 복사 생성자 ) - 연사자 중첩 - 동적 메모리를 가지는 클래스를 지원 하도록 멤버 함수 작성
제8장 포인터와 동적객체 생성 포인터의 개념을 이해한다. 포인터와 관련된 연산을 이해한다.
C-언어와 기반구조 정보보호학과 이정수 교수.
5. 논리적 자료표현 : 구조체.
[ 단원 06 ] 상속과 다형성.
제 4 장 클래스 작성 Lab 4- 2.
제 11장. 템플릿과 STL 학기 프로그래밍언어및실습 (C++).
3장,4장 발표 서정우.
03. 메모리 관리 C++ 프로그램에서 다룰 수 있는 메모리의 종류
C++ Espresso 제13장 입출력과 파일처리.
포인터와 배열 조 병 규 한 국 교 통 대 학 교 SQ Lab..
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
10장 템플릿과 표준 템플릿 라이브러리(STL)
새로운 타입 정의하기 Defining new types
실습과제 1번 /* 1. 멤버 변수로 반경 radius를 갖고, 그 값을 모니터에 출력하는
개정판 누구나 즐기는 C언어 콘서트 제10장 문자열 출처: pixabay.
개정판 누구나 즐기는 C언어 콘서트 제11장 구조체, 공용체, 열거형 출처: pixabay.
C.
Presentation transcript:

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

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

생성자 생성자(constructor)는 초기화를 담당하는 함수

생성자가 필요한 이유 #include <iostream> using namespace std; class Time { public: int hour; // 시를 나타낸다. 0-23가 가능하다. int minute; // 분을 나타낸다. 0-59가 가능하다. void print() { cout << hour << ":" << minute << endl; } }; Time a; // 객체 a를 생성한다. a.hour = 26; a.minute = 70;

생성자의 예 class Time { public: int hour; // 0-23 int minute; // 0-59 Time(int h, int m) { hour = h; minute = m; } void print() { cout << hour << ":" << minute << endl; };

생성자를 호출하는 방법 Time a; // ① 오류이다! 초기화값이 없다! Time b(10, 25); // ② OK 하지만 예전의 방법이다. Time c { 10, 25 }; // ③ OK 최신의 방법이다. Time d = { 10, 25 }; // ④ OK 하지만 간결하지 않다.

생성자의 중복 정의 #include <iostream> using namespace std; class Time { public: int hour; // 0-23 int minute; // 0-59 Time() { hour = 0; minute = 0; } Time(int h, int m) { hour = h; minute = m; void print() { cout << hour << ":" << minute << endl; };

디폴트 생성자 #include <iostream> using namespace std; class Time { public: int hour; // 0-23 int minute; // 0-59 Time(int h=0, int m=0) { hour = h; minute = m; } void print() { cout << hour << ":" << minute << endl; };

디폴트 생성자 int main() { Time a; // OK Time b{ 10, 25 }; // OK a.print(); b.print(); return 0; }

멤버 초기화 리스트 Time(int h, int m) : hour{h}, minute{m} { }

소멸자

소멸자 #include <string.h> class MyString { private: char *s; int size; public: MyString(char *c) { size = strlen(c)+1; s = new char[size]; strcpy(s, c); } ~MyString() { delete[] s; }; int main() { MyString str("abcdefghijk");

Lab: Rect 클래스 사각형을 나타내는 Rectangle 클래스에 생성자를 추가해 보자.

solution #include <iostream> using namespace std; class Rectangle { int width, height; public: Rectangle(int w, int h); int calcArea(); }; Rectangle::Rectangle(int w, int h) { width = w; height = h; } int Rectangle::calcArea() return width*height;

solution int main() { Rectangle r{ 3, 4 }; cout << "사각형의 넓이 : " << r.calcArea() << '\n'; return 0; }

Lab: Circle 클래스 원을 나타내는 Circle 클래스를 작성하여 보았다. 원은 중 심점과 반지름과 색상으로 표현된다. 약 10개의 Circle 객 체를 생성하면서 랜덤한 위치와 랜덤한 반지름으로 화면 에 원을 그려보자. 원의 중심점과 반지름은 생성자를 호 출하여 설정하라

solution #include <windows.h> #include <iostream> using namespace std; class Circle { int x, y, radius; string color; public: Circle(int xval = 0, int yval = 0, int r = 0, string c = ""); double calcArea() { return radius*radius*3.14; } void draw(); }; Circle::Circle(int xval, int yval, int r, string c) x = xval; y = yval; radius = r; color = c; }

예제 class Time { private: // 이후에 선언되는 멤버는 모두 전용 멤버가 된다. int hour; // 0-23 int minute; // 0-59 public: Time(int h, int m); void inc_hour(); void print(); }; Time::Time(int h, int m) { hour = h; minute = m; } void Time::inc_hour() { ++hour; if (hour > 23) hour = 0;

예제 Time a { 24, 59 }; ++a.hour; // 이제는 오류가 발생한다!!

접근제어

접근자와 설정자

예제 #include <iostream> using namespace std; class Time { public: Time(int h, int m); void inc_hour(); void print(); int getHour() { return hour; } int getMinute() { return minute; } void setHour(int h) { hour = h; } void setMinute(int m) { minute = m; } private: int hour; // 0-23 int minute; // 0-59 };

예제 int main() { Time a{ 0, 0 }; a.setHour(6); a.setMinute(30); a.print(); return 0; }

Lab: 원들의 경주 지금까지 학습한 내용을 바탕으로 “원들의 경주“ 게임을 다시 작성하여 보자. 두 개의 원을 생성한 후에 난수를 발 생하여 원들을 움직인다.

Solution #include <iostream> #include <windows.h> using namespace std; class Circle { public: Circle(int xval, int yval, int r); void draw(); void move(); private: int x, y, radius; }; Circle::Circle(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{ 100, 100, 50 }; Circle c2{ 100, 200, 40 }; for (int i = 0; i < 20; i++) { c1.move(); c1.draw(); c2.move(); c2.draw(); Sleep(1000); return 0;

객체와 함수 객체가 함수의 매개 변수로 전달되는 경우 객체의 참조자가 함수의 매개 변수로 전달되는 경우 함수가 객체를 반환하는 경우

객체가 함수의 매개 변수로 전달되는 경우 값을 전달한다. 어떤 피자 체인점에서 미디엄 크기의 피자를 주문하면 무 조건 라지 피자로 변경해준다고 하자. 다음과 같이 프로 그램을 작성하면 피자의 크기가 커질까?

#include <iostream> using namespace std; class Pizza { public: Pizza(int s) : size(s) { } int size; // 단위: 인치 }; void makeDouble(Pizza p){ p.size *= 2; } int main(){ Pizza pizza(10); makeDouble(pizza); cout << pizza.size << "인치 피자" << endl; return 0;

실행결과

객체의 참조자가 함수의 매개 변수로 전달되는 경우 #include <iostream> using namespace std; class Pizza { public: Pizza(int s) : size(s) { } int size; // 단위: 인치 }; void makeDouble(Pizza& p) { p.size *= 2; } int main() { Pizza pizza(10); makeDouble(pizza); cout << pizza.size << "인치 피자" << endl; return 0;

실행결과

함수가 객체를 반환하는 경우 함수가 객체를 반환할 때도 객체의 내용이 복사될 뿐 원 본이 전달되지 않는다.

예제 #include <iostream> using namespace std; class Pizza { public: Pizza(int s) : size(s) { } int size; // 단위: 인치 }; Pizza createPizza() { Pizza p(10); return p; } int main() { Pizza pizza = createPizza(); cout << pizza.size << "인치 피자" << endl; return 0;

실행결과

Q & A