-
[C++] 객체와 클래스 연습문제 (1)Programming/프로그래밍 2020. 8. 14. 23:59
C++ 기초 플러스 10장 연습문제 풀이를 해보았다.
1. 연습 문제 5에서 서술한 클래스를 위한 메서드 정의들을 제공하라.
모든 메서드들이 바르게 동작하는지 보여주는 짧은 프로그램을 하나 작성하라. ( account.h , account.cpp , useaccnt.cpp )
account.h, account.cpp
#include <iostream> class BankAccount { private: std::string name; std::string acctnum; double balance; public: BankAccount(std::string client, std::string num, double bal = 0.0); void show() const; void deposit(double cash); void withdraw(double cash); }; BankAccount::BankAccount(std::string client, std::string num, double bal) { name = client; acctnum = num; balance = bal; } void BankAccount::show() const{ std::cout << "예금주 : " << name << std::endl; std::cout << "계좌 번호 : " << acctnum << std::endl; std::cout << "잔액 : " << balance << std::endl << std::endl; } void BankAccount::deposit(double cash) { // 예금 todos.. if(cash <= 0 ) std::cout << "입력 금액이 잘못되었습니다." << std::endl; balance += cash; } void BankAccount::withdraw(double cash) { // 출금 todos.. if(cash <= 0 ) std::cout << "입력 금액이 잘못되었습니다." << std::endl; balance -= cash; if(balance < 0) { std::cout << "출금할 금액이 예금된 금액보다 큽니다." << std:: endl; balance += cash; } }
useaccnt.cpp
#include "10_1_h.h" int main() { BankAccount myAccount("HelloWorld", "20200811", 300000.00); myAccount.show(); myAccount.deposit(30000); myAccount.show(); myAccount.withdraw(10000); myAccount.show(); return 0; }
2. 다음은 다소 간단한 클래스의 정의이다.
// // 10_2.hpp // C++Training // // Created by 백인걸 on 2020/08/13. // Copyright © 2020 백인걸. All rights reserved. // #ifndef _0_2_hpp #define _0_2_hpp #include <iostream> class Person { private: static const int LIMIT = 25; std::string lname; // Person의 성 씨. char fname[LIMIT]; // Person의 이름. public: Person() { lname = ""; fname[0] = '\0'; } // #1 Person(const std::string ln, const char *fn = "Heyyou"); // #2 // 다음 메서드들은 lname과 fname을 디스플레이한다. void Show() const; // 이름 성씨 형식 void FormalShow() const; // 성씨, 이름 형식 }; #endif /* _0_2_hpp */
( 두 개의 형태가 어떻게 쓰이는지 비교하기 위해서 string과 문자 배열 둘 다 사용한다.)
정의되지 않은 메서드들을 위한 코드를 제공함으로써 구현을 완성하는 프로그램을 작성하라.
그 클래스를 사용하는 프로그램은 세 가지 가능한 생성자 호출(매개변수 없음, 하나의 매개변수, 두 개의 매개변수)과 두 개의 디스플레이 메서드를 사용해야 한다. 다음은 생성자들과 메서드들을 사용하는 예이다.
Person one; // 디폴트 생성자를 사용. Person two("Smythecraft"); // 하나의 디폴트 매개변수를 가지고 #2를 사용. Persin three("Dimwiddy", "Sam"); // 디폴트 없이 #2를 사용한다. one.Show(); std::cout << std::endl; one.FormalShow(); // two, three를 위한 기타 등등
코드
// // 10_2.hpp // C++Training // // Created by 백인걸 on 2020/08/13. // Copyright © 2020 백인걸. All rights reserved. // #ifndef _0_2_hpp #define _0_2_hpp #include <iostream> class Person { private: static const int LIMIT = 25; std::string lname; char fname[LIMIT]; public: Person() { lname = "no"; fname[0] = '\0'; } Person(const std::string ln, const char *fn = "Heyyou"); void Show() const; void FormalShow() const; }; Person::Person(const std::string ln, const char *fn) { lname = ln; strcpy(fname, fn); } void Person::Show() const { std::cout << "Show() 함수 출력" << std::endl; std::cout << "성 : " << lname << std::endl; std::cout << "이름 : " << fname << std::endl; } void Person::FormalShow() const { std::cout << "FormalShow() 함수 출력" << std::endl; std::cout << "성 : " << lname; std::cout << ", 이름 : " << fname << std::endl; } #endif /* _0_2_hpp */
// // 10_2.cpp // C++Training // // Created by 백인걸 on 2020/08/13. // Copyright © 2020 백인걸. All rights reserved. // #include "10_2.hpp" int main() { Person one; Person two("Smythecraft"); Person three("Dimwiddy", "Sam"); one.Show(); std::cout << std::endl; one.FormalShow(); two.Show(); std::cout << std::endl; two.FormalShow(); three.Show(); std::cout << std::endl; three.FormalShow(); return 0; }
3.
9장의 프로그래밍 연습 1을 다시하라.
그러나 이번에는 거기에 있는 코드들을 적절한 Golf 클래스 선언으로 대체하라.
setgolf(golf &, const char *, int)를 초기값으로 제공할 적절한 매개변수를 가진 생성자로 대체하라.
setgolf()의 대화식 버전은 그대로 유지하되, 이것을 생성자를 사용하여 구현하라.
( 예를 들면, setgolf()의 대화식 코드를 유지하기 위하여, 데이터를 받아들이고 그 데이터를 생성자에 매개변수로 전달하여 임시 객체를 생성하고, 호출한 객체인 *this 에 그 임시 객체를 대입하라. )
코드 ( 구조체로 이루어진 Golf 구조체를 클래스로 변경하고 생성자를 만듦. )
golf.h
#include <iostream> class Golf { private: const static int Len = 40; char fullname[Len]; int handicap; public: Golf(); Golf(const char *name, int hc); void setgolf(Golf &g); void sethandicap(int hc); void updatehandicap(); void showgolf(); };
.cpp
#include "golf.h" Golf::Golf() { strcpy(fullname, "no name"); handicap = 0; } Golf::Golf(const char *name, int hc) { strcpy(fullname, name); handicap = hc; } // golf 의 이름과 핸디캡을 새로 지정. void Golf::setgolf(Golf &g) { std::cout << "이름 : " ; std::cin >> g.fullname; std::cout << "핸디캡 : " ; std::cin >> g.handicap; *this = Golf(g.fullname, g.handicap); } // 프로그램 사용자에게 이름과 핸디캡을 입력해 줄 것을 요구함. void Golf::sethandicap(int hc) { handicap = hc; } // 해당 객체의 핸디캡을 업데이트. void Golf::updatehandicap() { int hc; std::cout << this->fullname << " 핸디캡을 업데이트합니다." << std::endl; std::cout << "핸디캡 : "; std::cin >> hc; handicap = hc; } // 객체를 출력해서 확인함. void Golf::showgolf() { std::cout << fullname << std::endl; std::cout << handicap << std::endl; } // 메인 함수 구현. int main() { Golf my = Golf(); my.showgolf(); Golf ann = Golf("Ann Birdfree", 24); ann.showgolf(); Golf Andy, temp; Andy.setgolf(temp); Andy.showgolf(); Andy.updatehandicap(); Andy.showgolf(); return 0; }
4.
9장의 프로그래밍 연습 4를 다시 하라.
그러나 거기에 있는 Sales 구조체와 관련 함수들을, 클래스와 메서드로 바꾸어라.
setSales(Sales &, double [], int) 함수를 생성자로 대체하라.
setSales(Sales &) 대화식 메서드를 생성자를 사용하여 구현하라. 그 클래스를 이름 공간 SALES 안에 넣어라.
대화식 메서드라는 말이.. 사용자가 입력값을 집어넣어서 반영시키라는 뜻 같다.
이 문제는 헤더파일만 구현하고 소스코드 답안지를 참고해서 분석하는 정도로 해보았다.
.h
namespace SALES { const static int QUARTERS = 4; class Sales { private: double sales[QUARTERS] = {0, }; double average; double max; double min; public: Sales(); Sales(Sales &sales, const double ar[], int n); void showSales(); }; }
.cpp
#include ".h" namespace SALES { Sales::Sales() { // 초기화. average = 0.0; max = 0.0; min = 0.0; } Sales::Sales(Sales &sales, const double ar[], int n) { if (QUARTERS < n) n = QUARTERS; int i; for (i = 0; i < n; i++) this->sales[i] = ar[i]; if (n < QUARTERS) { do { this->sales[n] = 0; n++; } while (n != QUARTERS); } double temp = 0; for (i = 0; i < n; i++) temp += this->sales[i]; this->average = temp / n; temp = 0; for (i = 0; i < n; i++) if (temp < this->sales[i]) temp = this->sales[i]; this->max = temp; temp = this->sales[0]; for (i = 1; i < n; i++) if (temp > this->sales[i]) temp = this->sales[i]; this->min = temp; } void Sales::showSales() { for(int i = 0; i < QUARTERS; i++) std::cout << "sales : " << this->sales[i] << std::endl; std::cout << "avg : " << this->average << std::endl; std::cout << "max : " << this->max << std::endl; std::cout << "min : " << this->min << std::endl; } } int main() { double array[SALES::QUARTERS] = {100.11, 200.22, 300.33, 400.44}; SALES::Sales tmp; std::cout << "salesman A 현황.." << std::endl; SALES::Sales salesman_a = SALES::Sales(tmp, array, 5); salesman_a.showSales(); std::cout << "분기별 판매량을 입력하세요.." << std::endl; for (int i = 0; i < SALES::QUARTERS; i++) { std::cout << i+1 << "분기‚ 판매량 : "; std::cin >> array[i]; } SALES::Sales salesman_b = SALES::Sales(tmp, array, SALES::QUARTERS); salesman_b.showSales(); return 0; }
반응형'Programming > 프로그래밍' 카테고리의 다른 글
[PHP] Composer classmap 사용 (0) 2020.09.05 [C++] 객체와 클래스 연습문제 (2) (0) 2020.08.16 [C++] 함수 - C++ 의 프로그래밍 모듈 (2) (0) 2020.08.07 [C++] 함수 - C++의 프로그래밍 모듈 (1) (0) 2020.08.06 [PHP] APM 설치 (0) 2019.01.07