열혈 C++ 프로그래밍 35

OOP 단계별 프로젝트 2

/*Banking System의 버전을 0.1에서 0.2로 업그레이드 시켜보자. 아직은 클래스를 설계하는게 익숙하지 않은 단계이니,버전 0.1에서 정의한 구조체 Account를 클래스 Account로 변경해 보겠다.이는 키워드 struct를 class로 변경하라는 뜻이 아니다. 다음과 같은 내용들을 더불어 고민하라는 뜻이다."어떻게 캡슐화를 시키고 정보를 은닉시켜야 할까?""생성자와 소멸자는 어떻게 정의해야 할까?"추가로, 구현하는데 있어서 두가지 제약을 하곘다.1.버전 0.1의 Account 구조체는 char형 멤버로 둬서 고객의 이름을 저장했는데, 버전 0.2의 Account 클래스에는 이를 동적할당 형태로 구현하기로 하자2.객체배열을 선언하지 말고, 객체 포인터 배열을 선언해서 객체를 저장하라*/#..

열혈 C++ 프로그래밍 4-3 문제

[1번 문제]/*앞서 제시한 문제 4-2를 해결하였는가? 당시만 해도 생성자를 설명하지 않은 상황이기 때문에 별도의 초기화함수를 정의 및 호출해서 Point, Circle, Ring 클래스의 객체를 초기화 하였다.이 때 구현한 답에 대해서 모든 클래스에 생성자를 정의해보자*/#include using namespace std; class Point{private: int xpos; int ypos;public: /* void Init(int x, int y) { xpos = x; ypos = y; } */ Point(int x, int y) :xpos(x), ypos(y) { } int GetX() { return xpos; } int GetY() { return ypos; } void ShowPoint..

열혈 C++ 프로그래밍 4-1 문제

/*Chapter 03에서 제시한 과일장수 시뮬레이션 예제 FruitSaleSim1.cpp에서 정의한 두 클래스의 멤버변수는 private으로 선언이 되어있다.그러나 다음 조건을 유지할 수 있는 장치는 아무것도 되어있지 않다.1.사과의 구매를 목적으로 0보다 작은수를 전달할 수 없다위의 제약사항을 항상 만족시킬 수 있도록 예제를 변경하고, 예제의 안정성을 높일 수 있도록 일부 함수를 const로 선언해보자*/ /*FruitSaleSim1.cpp#include using namespace std; class FruitSeller{private: int APPLE_PRICE; int numOfApples; int myMoney;public: void InitMembers(int price, int num, ..

열혈 C++ 프로그래밍 3-2 문제

[1번 문제]/*계산기 기능의 Calculator 클래스를 정의해보자. 기본적으로 지니는 기능은 덧셈, 뺄셈, 곱셈 그리고 나눗셈이며, 연산을 할 때마다 어떠한 연산을몇 번 수행했는지 기록되어야 한다. 아래의 main 함수와 실행의 예에 부함하는 Calculator 클래스를 정의하면 된다.단, 멤버변수는 private으로, 멤버함수는 public으로 선언하자.int main(void){Calculator cal;cal.Init();cout

열혈 C++ 프로그래밍 3-1 문제

/*2차원 평면상에서의 좌표를 표현할 수 있는 구조체를 다음과 같이 정의하였다struct Point{ int xpos; int ypos;};위의 구조체를 기반으로 다음의 함수를 정의하고자 한다(자세한 기능은 실행의 예를 통해서 확인)void MovePos(int x, int y); //점의 좌표이동void AddPoint(const Point &pos); //점의 좌표증가void ShowPosition(); //현재 x, y 좌표정보 출력 int main(void){ Point pos1={12, 4}; Point pos2={20, 30}; pos1.MovePos(-7, 10); pos1.ShowPosition(); //[5, 14] 출력 pos1.AddPoint(pos2); pos1.ShowPositio..

열혈 C++ 프로그래밍 2-4 문제

[문제1]/*다음 표준함수를 호출하는 예제를 만들되, C++의 헤더를 선언해서 만들어보자.그리고 예제의 내용은 상관이 없지만, 아래의 함수들을 최소 1회 이상 호출해야 한다.참고로 다음 함수들은 C언어의 경우 에 선언되어 있다1.strlen 문자열의 길이 계산2.strcat 문자열의 뒤에 덧붙이기3.strcpy 문자열의 복사4.strcmp 문자열의 비교*/#include #include using namespace std; int main(void){ char str1[20] = "I like "; char str2[20] = "Gudetama"; char str3[20]; int length = strlen(str1); cout

열혈 C++ 프로그래밍 2-3 문제

/*구조체에 대한 복습을 겸할 수 있는 문제를 제시하겠다.2차원 평면상에서의 좌표를 표현할 수 있는 구조체를 다음과 같이 정의하였다typedef struct __Point{ int xpos; int ypos;}Point;위의 구조체를 기반으로 두 점의 합을 계산하는 함수를 다음의 형태로 정의하고(덧셈결과는 함수의 반환을 통해서 얻게 한다).Point& PntAdder(const Point &p1, const Point &p2);임의의 두점을 선언하여, 위 함수를 이용한 덧셈연산을 진행하는 main 함수를 정의해보자참고로 이 문제의 해결을 위해서는 다음 두 질문에 답을 할 수 있어야 한다1.동적할당 한 변수를 함수의 참조형 매개변수의 인자로 어떻게 전달해야 하는가?2.함수 내에 선언된 변수를 참조형으로 반..

열혈 C++ 프로그래밍 2-2 문제

/*const 포인터에 대한 복습을 겸할 수 있는 문제를 제시하겠다. 다음의 상수선언을 보자const int num=12;포인터 변수를 선언해서 위 변수를 가리키게 해보자. 그리고 이 포인터의 변수를 참조하는 참조자를 하나 선언하자마지막으로 이렇게 선언된 포인터 변수와 참조자를 이용해서 num에 저장된 값을 출력하는 예제를 만들자*/#include using namespace std; int main(void){ const int num = 12; const int *ptr = # //포인터 변수를 선언해서 변수 가리킴 const int *(&pointer) = ptr; //포인터의 변수를 참조하는 참조자 cout

열혈 C++ 프로그래밍 2-1 문제

[1번 문제]/*참조자를 이용해서 다음 요구사항에 부합하는 함수를 각각 정의하여라1.인자로 전달된 int형 변수의 값을 1씩 증가시키는 함수2.인자로 전달된 int형 변수의 부호를 바꾸는 함수*/#include using namespace std; void add(int &ptr) //참조자를 이용한 함수, 물론 포인터를 이용해도 된다{ ptr += 1;} void reverse(int &ptr){ ptr *= -1;} int main(void){ int num; cout > num; cout