쉽게 풀어쓴 C 프로그래밊

Similar documents
<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Blog

Microsoft PowerPoint - Lect04.pptx

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

슬라이드 1

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍

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

설계란 무엇인가?

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - C++ 5 .pptx

PowerPoint Presentation

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

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

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

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - Chapter 6.ppt

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

PowerPoint Presentation

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

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

Slide 1

PowerPoint Presentation

PowerPoint Presentation

C++ Programming

No Slide Title

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

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

쉽게 풀어쓴 C 프로그래밍

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

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

PowerPoint Template

C프로-3장c03逞풚

C++ Programming

Microsoft PowerPoint - Java7.pptx

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

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

C++ Programming

쉽게 풀어쓴 C 프로그래밍

C++ Programming

JAVA PROGRAMMING 실습 05. 객체의 활용

JAVA PROGRAMMING 실습 08.다형성

Microsoft PowerPoint - 2강

Microsoft PowerPoint - Chapter 1-rev

Microsoft PowerPoint - Chap12-OOP.ppt

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

JAVA PROGRAMMING 실습 02. 표준 입출력

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

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

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

PowerPoint 프레젠테이션

PowerPoint Template

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

PowerPoint Template

080629_CFP °ø°³¿ë.hwp

11장 포인터

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

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

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070>

쉽게 풀어쓴 C 프로그래밍

기초컴퓨터프로그래밍

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

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

PowerPoint 프레젠테이션

Microsoft PowerPoint 장강의노트.ppt

쉽게

No Slide Title

Microsoft PowerPoint - [2009] 02.pptx

설계란 무엇인가?

PowerPoint Presentation

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

Microsoft Word - EEL2 Lab4.docx

설계란 무엇인가?

Slide 1

슬라이드 1

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

설계란 무엇인가?

Microsoft PowerPoint - chap06-2pointer.ppt

KNK_C_05_Pointers_Arrays_structures_summary_v02

Design Issues

Programming hwp

The C++ Programming Language 5 장포인터, 배열, 구조체 5.9 연습문제 다음의선언문을순서대로작성해보자. 문자에대한포인터, 10개정수의배열, 10개정수의배열의참조자, 문자열의배열에대한포인터, 문자에대한포인터에대한포인터, 상수정수, 상수

PowerPoint Presentation

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

설계란 무엇인가?

17장 클래스와 메소드

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

02장.배열과 클래스

Microsoft PowerPoint - 6주차.pptx

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

쉽게 풀어쓴 C 프로그래밊

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

PowerPoint Template

Slide 1

Transcription:

C++ Exspresso 제 5 장클래스의기초

이번장에서학습할내용 클래스와객체 객체의일생 메소드 필드 UML 직접클래스를작성해봅시다.

QUIZ 1. 객체는 속성과 동작을가지고있다. 2. 자동차가객체라면클래스는 설계도이다. 먼저앞장에서학습한클래스와객체의개념을복습해봅시다.

1. 클래스의구성 클래스 (class) 는객체의설계도라할수있다. 클래스는멤버변수와멤버함수로이루어진다. 멤버변수는객체의속성을나타낸다. 멤버함수는객체의동작을나타낸다.

추상화 추상화는많은특징중에서문제해결에필요한것만을남기고나머지는전부삭제하는과정이다.

클래스정의의예 class Car public: // 멤버변수선언 int speed; // 속도 int gear; // 기어 string color; // 색상 // 멤버함수선언 void speedup() // 속도증가멤버함수 speed += 10; 멤버변수정의! 멤버함수정의! ; void speeddown() // 속도감소멤버함수 speed -= 10;

객체 int 타입의변수를선언하는경우 int i; 클래스도타입으로생각하면된다. Car 타입의변수를선언하면객체가생성된다. Car mycar;

객체의사용 객체를이용하여멤버에접근할수있다. 이들멤버변수에접근하기위해서는도트 (.) 연산자를사용한다. mycar.speed = 100; mycar.speedup(); mycar.speeddown();

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

예제 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 Car public: ; int speed; // 속도 int gear; // 기어 string color; // 색상 void speedup() // 속도증가멤버함수 speed += 10; void speeddown() // 속도감소멤버함수 speed -= 10; void show() // 상태출력멤버함수 cout << "============== " << endl; cout << " 속도 : " << speed << endl; cout << " 기어 : " << gear << endl; cout << " 색상 : " << color << endl; cout << "============== " << endl;

예제 int main() Car mycar, yourcar; mycar.speed = 100; mycar.gear = 3; mycar.color = "red"; yourcar.speed = 10; yourcar.gear = 1; yourcar.color = "blue"; mycar.speedup(); yourcar.speedup(); speed 100 gear 3 color red mycar speed 10 gear 1 color blue yourcar mycar.show(); yourcar.show(); return 0;

예제 ============== 속도 : 110 기어 : 3 색상 : red ============== ============== 속도 : 20 기어 : 1 색상 : blue ==============

객체의동적생성 객체도 new 와 delete 를사용하여서동적으로생성, 반환할수있다. Car *dyncar = new Car; dyncar->speed = 100; dyncar->speedup();... delete dyncar; // 동적객체생성 // 동적객체사용 // 동적객체사용 // 동적객체삭제

중간점검문제 1. 객체들을만드는설계도에해당되는것이 이다. 2. 클래스선언시에클래스안에포함되는것은 과 이다. 3. 객체의멤버에접근하는데사용되는연산자는 이다. 4. 강아지를나타내는클래스를작성하여보라. 강아지의이름, 종, 색깔등을멤버변수로지정하고짖기, 물기, 먹기등의멤버함수를정의하여보라. 5. 동적메모리할당을이용하여서 othercar 를생성하는문장을쓰시오. 6. 객체포인터 p 를통하여 getspeed() 멤버함수를호출하는문장을쓰시오.

2. 접근제어

전용멤버와공용멤버 전용멤버 (private member) 비공개멤버 클래스내부에서만접근이허용 공용멤버 (public member) 공개멤버 공용멤버는다른모든클래스들이사용가능

private 와 public class Car // 멤버변수선언 int speed; // 속도 int gear; // 기어 string color; // 색상 int main() Car mycar; mycar.speed = 100; // 오류! 아무것도지정하지않으면디폴트로 private 객체를통해직접접근할수없다!!!

private 와 public class Car public: int speed; // 속도 int gear; // 기어 string color; // 색상 다른지정자가나오기전까지 public int main() Car mycar; mycar.speed = 100; // OK!

private 와 public class Car public: int speed; private: int gear; string color; // 공용멤버 // 전용멤버 // 전용멤버

예제 #include <iostream> #include <string> using namespace std; class Employee string name; // private 로선언 int salary; // private 로선언 int age; // private 로선언 // 직원의월급을반환 int getsalary() return salary; public: // 직원의나이를반환 int getage() return age; // 직원의이름을반환 string getname() return name; ; int main() Employee e; e.salary = 300; // 오류! private 변수 e.age = 26; // 오류! private 변수 int sa = e.getsalary(); // 오류! private 멤버함수 string s = e.getname(); // OK! int a = e.getage(); // OK

멤버변수 멤버변수 : 클래스안에서그러나멤버함수외부에서정의되는변수 class Date public: void printdate() cout << year << "." << month << "." << day << endl; int getday() return day; // 멤버변수선언 int year; string month; int day;

중간점검문제 1. 접근제어지시어인 private 와 public 을설명하라. 2. 아무런접근제어지시어를붙이지않으면어떻게되는가?

3. 접근자와설정자 접근자 (accessor): 멤버변수의값을반환 ( 예 ) getbalance() 설정자 (mutator): 멤버변수의값을설정 ( 예 ) setbalance();

예제 class Car private: // 멤버변수선언 int speed; // 속도 int gear; // 기어 string color; // 색상... public: // 접근자선언 int getspeed() return speed; // 설정자선언 void setspeed(int s) speed = s;

예제 // 접근자선언 int getgear() return gear; // 변경자선언 void setgear(int g) gear = g; // 접근자선언 string getcolor() return color; // 변경자선언 void setcolor(string c) color = c; ;

접근자와설정자의장점 설정자의매개변수를통하여잘못된값이넘어오는경우, 이를사전에차단할수있다. 멤버변수값을필요할때마다계산하여반환할수있다. 접근자만을제공하면자동적으로읽기만가능한멤버변수를만들수있다. void setspeed(int s) if( s < 0 ) speed = 0; else speed = s;

중간점검문제 1. 접근자와설정자함수를사용하는이유는무엇인가? 2. 강아지 ( 종, 나이, 몸무게 ) 를클래스로모델링하고각멤버변수에대하여접근자와설정자를작성하여보라.

4. 멤버함수의외부정의

내부정의와외부정의의차이 멤버함수가클래스내부에서정의되면자동적으로인라인 (inline) 함수가된다. 멤버함수가클래스외부에정의되면일반적인함수와동일하게호출한다.

예제 #include <iostream> using namespace std; class Car public: int getspeed(); void setspeed(int s); void honk(); private: int speed; ; // 속도 int Car::getSpeed() return speed; void Car::setSpeed(int s) speed = s;

예제 void Car::honk() cout << " 빵빵!" << endl; int main() Car mycar; mycar.setspeed(80); mycar.honk(); cout << " 현재속도는 " << mycar.getspeed() << endl; return 0; 빵빵! 현재속도는 80 계속하려면아무키나누르십시오...

클래스선언과구현의분리 클래스의선언과구현을분리하는것이일반적

예제 car.h class Car public: int getspeed(); void setspeed(int s); void honk(); private: int speed; ; // 속도 클래스를선언한다.

예제 car.cpp #include <iostream> #include "car.h" using namespace std; int Car::getSpeed() return speed; void Car::setSpeed(int s) speed = s; void Car::honk() cout << " 빵빵!" << endl; 클래스를정의한다.

예제 main.cpp #include <iostream> #include "car.h" // 현재위치에 car.h 를읽어서넣으라는것을의미한다. using namespace std; int main() Car mycar; mycar.setspeed(80); mycar.honk(); cout << " 현재속도는 " << mycar.getspeed() << endl; return 0; 클래스를사용한다.

5. 멤버함수의중복정의 멤버함수도중복정의 ( 오버로딩 :Overloading) 가가능함 class Car private: int speed; int gear; string color; // 색상 public: int getspeed(); void setspeed(int s); void setspeed(double s); ; // 속도 // 기어 함수의중복시함수이름이같지만함수의 signature( 매개변수의개수, 자료형 ) 는반드시달라야한다!!!

멤버함수의중복정의 int Car::getSpeed() return speed; void Car::setSpeed(int s) speed = s; void Car::setSpeed(double s) speed = (int)s; int main() Car mycar; mycar.setspeed(80); mycar.setspeed(100.0); 멤버함수중복정의 cout << " 차의속도 : " << mycar.getspeed() << endl; return 0;

6. 자동차경주예제 간단한자동차게임을작성 두대의자동차를생성하여서속도를 0 에서 199 사이의난수로설정 속도가빠른자동차가무조건경주에서이긴다고가정

예제 #include <iostream> #include <string> using namespace std; class Car private: int speed; int gear; string color; public: int getspeed(); void setspeed(int s); int getgear(); void setgear(int g); string getcolor(); void setcolor(string c); // 속도 // 기어 // 색상 // 외부에서정의 ; void speedup(); void speeddown(); void init(int s, int gear, string c); void show();

예제 int Car::getSpeed() return speed; void Car::setSpeed(int s) speed = s; int Car::getGear() return gear; void Car::setGear(int g) gear = g; string Car::getColor() return color; void Car::setColor(string c) color = c; void Car::speedUp() // 속도증가멤버함수 speed += 10;

예제 void Car::speedUp() // 속도증가멤버함수 speed += 10; void Car::speedDown() // 속도감소멤버함수 speed -= 10; void Car::init(int s, int g, string c) speed = s; gear = g; color = c; void Car::show() cout << "============== " << endl; cout << " 속도 : " << speed << endl; cout << " 기어 : " << gear << endl; cout << " 색상 : " << color << endl; cout << "============== " << endl;

예제 int main() Car car1, car2; car1.init(rand() % 200, 1, "red"); car1.show(); car2.init(rand() % 200, 1, "red"); car2.show(); if( car1.getspeed() > car2.getspeed() ) cout << "car1 이승리하였습니다 " << endl; else cout << "car2 가승리하였습니다 " << endl; ============== 속도 : 41 기어 : 1 색상 : red ============== ============== 속도 : 67 기어 : 1 색상 : blue ============== car2 가승리하였습니다 return 0;

중간점검문제 1. 멤버함수안에서 private 멤버변수를사용할수있는가? 2. 멤버함수는클래스의외부에서정의될수있는가? 3. 멤버함수는별도의소스파일에서정의될수있는가?

UML UML(Unified Modeling Language): 애플리케이션을구성하는클래스들간의관계를그리기위하여사용 Is_A use use 클래스 + public, - private

클래스와클래스의관계

Television -ison -volume -channel +setchannel() +getchannel() +setvolume() +getvolume() +turnon() +turnoff() +tostring()

구조체 구조체 (structure) = 클래스 struct BankAccount // 은행계좌 int accountnumber; // 계좌번호 int balance; // 잔액을표시하는변수 double interest_rate; // 연이자 double get_interrest(int days) return (balance*interest_rate)*((double)days/365.0); ; 모든멤버가디폴트로 public 이된다.

예제 (Desk Lamp)

예제 (Desk Lamp) #include <iostream> #include <string> using namespace std; class DeskLamp private: // 인스턴스변수정의 bool ison; // 켜짐이나꺼짐과같은램프의상태 public: ; // 멤버함수선언 void turnon(); // 램프를켠다. void turnoff(); // 램프를끈다. void print(); // 현재상태를출력 void DeskLamp::turnOn() ison = true;

예제 (Desk Lamp) void DeskLamp::turnOff() ison = false; void DeskLamp::print() cout << " 램프가 " << (ison == true? " 켜짐 " : " 꺼짐 ") << endl; int main() // 객체생성 DeskLamp lamp; // 객체의멤버함수를호출하려면도트연산자인. 을사용한다. lamp.turnon(); lamp.print(); lamp.turnoff(); lamp.print(); return 0; 램프가켜짐램프가꺼짐

예제 (BankAccount) 은행계좌

예제 #include <iostream> #include <string> using namespace std; class BankAccount private: int accountnumber; string owner; int balance; // 은행계좌 // 계좌번호 // 예금주 // 잔액을표시하는변수 public: ; void setbalance(int amount); // balance에대한설정자 int getbalance(); // balance에대한접근자 void deposit(int amount); // 저금함수 void withdraw(int amount); // 인출함수 void print(); // 현재상태출력 void BankAccount::setBalance(int amount) balance = amount;

예제 int BankAccount::getBalance() return balance; void BankAccount::deposit(int amount) balance += amount; void BankAccount::withdraw(int amount) balance -= amount; void BankAccount::print() cout << " 잔액은 " << balance << " 입니다." << endl; int main() BankAccount account; account.setbalance(0); account.deposit(10000); account.print(); account.withdraw(8000); account.print(); return 0; 잔액은 10000 입니다. 잔액은 2000 입니다.

예제 (Date) 날짜 1

예제 (Date) #include <iostream> #include <string> using namespace std; class Date private: int year; int month; int day; public: int getyear(); void setyear(int y); int getmonth(); void setmonth(int m); void setday(int d); int getday(); void print(); ; int Date::getYear() return year;

예제 (Date) void Date::setYear(int y) year = y; int Date::getMonth() return month; void Date::setMonth(int m) month = m; int Date::getDay() return day; void Date::setDay(int d) day = d; void Date::print() cout << year << " 년 " << month << " 월 " << day << " 일 " << endl; int main() Date date; date.setyear(2010); date.setmonth(1); date.setday(20); date.print(); return 0; 2010 년 1 월 20 일

예제 (Product) 상품

예제 #include <iostream> #include <string> using namespace std; class Product private: int id; string name; int price; public: void input(); void print(); bool ischeaper(product other); ; void Product::input() cout << " 상품의일련번호 : "; cin >> id; cout << " 상품의이름 : "; cin >> name; cout << " 상품의가격 : "; cin >> price;

예제 void Product::print() cout << " 상품번호 " << id << endl << " 상품의이름 : " << name << " 상품의가격 : " << price << endl; bool Product::isCheaper(Product other) if( price < other.price ) return true; else return false;

예제 int main() Product p1, p2; p1.input(); p2.input(); if( p1.ischeaper(p2) ) p1.print(); cout << " 이더쌉니다 \n"; else p2.print(); cout << " 이더쌉니다 \n"; return 0; 상품의일련번호 : 1 상품의이름 : 모니터상품의가격 : 100000 상품의일련번호 : 2 상품의이름 : 컴퓨터상품의가격 : 20000000 상품번호 1 상품의이름 : 모니터상품의가격 : 100000 이더쌉니다

Exercise 8. 다음은영화를나타내는 Movie 클래스이다. 질문에답하라. class Movie string title; string director; string actors; 1) UML // 영화제목 // 감독 // 배우

2) 각멤버변수에대한접근자와설정자를작성하라. string gettitle() return title; string getdirector() return director; string getactors() return actors; void settitle(string m_t) title = m_t; void setdirector(string m_d) director = m_d; void setactors(string m_a) actors = m_a;

3) 추가할수있는멤버변수와멤버함수를추가하라. string grade; // 등급 string genre; // 장르 4) C++ 로작성하라. 5) 객체 title 속성을 transformer 로변경하라. 6) Movie 객체를세개작성하라. 각각의값을멤버함수를이용하여 변경하라. 7) Movie 객체의내용을출력하는 show() 멤버함수를작성하고, Show() 함수호출을통해객체를출력하라.

Programming 4. Employee 클래스작성. - 직원이름 - 전화번호 - 연봉 접근자와설정자를작성하라. Employee 객체를생성하고출력하라.

Programming 8. 본문의 BankAccount 클래스에서송금하는멤버함수를추가한 다음검사하는프로그램을작성하라. int BankAccount::transfer(int amount, BankAccount otheraccount)

int main() BankAccount account, account1; account.setbalance(0); account1.setbalance(0); account.deposit(100000); account1.deposit(1000); cout<<" 계좌 1의잔액은 >> "; account.print(); cout<<" 계좌 2의잔액은 >> "; account1.print(); cout<<" 계좌 1의잔액은 >> "; account.withdraw(8000); account.print(); cout<<"-> 계좌 1에서 2000원을계좌 2로이체하기 "<<endl; cout<<" 계좌 1에이체한후잔액은 : "<<account.transfer(2000, account1)<<endl; return 0;

Q & A