※ 아 이건 문제가 좀 거지 같네요. Virtual 함수 쓰는 법 연습인 건 알겠지만, 문제 정의도 별로고... 실제 테스트 시나리오도 너무 부실하게 기술되어 있고... 좀더 문제가 이해하기 쉬웠으면 좋겠습니다. 

결국, 제 맘대로 해버렸다는... <iostream> 에서 cout으로 출력할 대, float 계산 결과의 소수점 맞추는 것도 마음에 안드네요. 이건 c의 stdio의 fprinf 같은 것 이용해야 깔끔합니다. 

● BankAcct.h
#ifndef __BACKACCT_H__
#define __BACKACCT_H__

#include <iostream>
#include <string>

class BankAcct
{
	protected:
		int money;

	public:
		BankAcct();
		~BankAcct();

		void deposit(int v_money);
		int withdraw(void);

		virtual float getInterest(void) = 0;
};
#endif




●BankAcct.cpp
#include "BankAcct.h"

BankAcct::BankAcct()
{
	/* do nothing */
}

BankAcct::~BankAcct()
{
	/* do nothing */
}

void BankAcct::deposit(int v_money)
{
	money += v_money;

	return;
}

int BankAcct::withdraw(void)
{
	float temp = money;

	money = 0;

	return temp;
}



●Accounts.h
#ifndef __ACCOUNTS_H__
#define __ACCOUNTS_H__

#include "BankAcct.h"

class SavingAcct:public BankAcct
{
	private:

	public:
		SavingAcct();
		~SavingAcct();
		virtual float getInterest(void);
};

class CheckingAcct:public BankAcct
{
	private:

	public:
		CheckingAcct();
		~CheckingAcct();
		float getInterest(void);
};
#endif



●Acounts.cpp
#include "Accounts.h"

SavingAcct::SavingAcct()
{
	money = 0;
}

SavingAcct::~SavingAcct()
{
	/* do nothing */
}

float SavingAcct::getInterest(void)
{
	return 0.09;
}

CheckingAcct::CheckingAcct()
{
	money = 0;
}

CheckingAcct::~CheckingAcct()
{
	/* do nothing */
}

float CheckingAcct::getInterest(void)
{
	/* do nothing */
	return 0.05;
}




●main.h
#include <iostream>
#include <iomanip>
#include <string>
#include "Accounts.h"

using namespace std;



●main.cpp
#include "main.h"

int main()
{
	float s_temp=0, c_temp = 0;

	/* Create acconts */
	SavingAcct S = SavingAcct();
	CheckingAcct C = CheckingAcct();

	/* Save some money */
	S.deposit(20000);
	C.deposit(15000);

	/* Calculate interest incomes */
	s_temp = S.withdraw() * S.getInterest();
	c_temp = C.withdraw() * C.getInterest();

	cout << "Saving Account Interest Incomes : expecting : " << setw(8) << setprecision(6) << s_temp << "\n";
	cout << "Checking Account Interest Incomes : expecting : " << setw(8) << setprecision(6) << c_temp << "\n";

	/* Save more money */
	S.deposit(s_temp + 20000);
	C.deposit(c_temp + 17000);

	/* Widthraw and Calculate total incomes */
	s_temp = S.withdraw() * (1 + S.getInterest());
	c_temp = C.withdraw() * (1 + C.getInterest());

	cout << "Saving Account Total Incomes : " << setw(8) << setprecision(6) << s_temp << "\n";
	cout << "Checking Account Total Incomes : " << setw(8) << setprecision(6) << c_temp << "\n";

	return 0;
}


 


Posted by 지그프리드 지그프리드

댓글을 달아주세요:: 네티켓은 기본, 스팸은 사절


p.339의 상속관련 예제입니다. 

● human.h

#include <iostream>
#include <string>
using namespace std;

#ifndef HUMAN_H
#define HUMAN_H

class Human
{
	protected:
		string name;
		int age;

	public:
		Human();
		Human(string name, int age);
		~Human();
		void setName(string v_name);
		string getName(void);
		void setAge(int v_age);
		int getAge(void);
		void print(void);
};

#endif

● human.cpp
#include "human.h"

Human::Human()
{
	/* Default constructor */
	cout << "Human default constructor" << "\n";
}

Human::Human(string name, int age)
{
	setName(name);
	setAge(age);	

	cout << "Human second constructor" << "\n";
}

Human::~Human()
{
	/* Do nothing */  
	cout << "Human default destructor" << "\n";
}

void Human::setName(string v_name)
{
	name = v_name;
	return;
}

string Human::getName()
{
	return name;
}

void Human::setAge(int v_age)
{
	age = v_age;
	return;
}

int Human::getAge()
{
	return age;
}

void Human::print(void)
{
	cout << "Name : " << name << "\tAge : " << age << "\n";

	return;
}

● student.h
#ifndef HUMAN_H
#include "human.h"
#endif

#ifndef STUDENT_H
#define STUDENT_H

class Student : public Human
{
	protected:
		string major;

	public:
		Student();
		Student(string name, int age, string major);
		~Student();
		void setMajor(string v_major);
		string getMajor(void);
		void print(void);
};
#endif


● student.cpp
#include "student.h"

Student::Student()
{
	/* default constructor */
	cout << "Student default constructor" << "\n";
}

Student::Student(string name, int age, string major)
{
	setName(name);
	setAge(age);
	setMajor(major);

	cout << "Student second constructor" << "\n";
}

Student::~Student()
{
	/* Do nothing */
	cout << "Student default destructor" << "\n";
}

void Student::setMajor(string v_major)
{
	major = v_major;
}

string Student::getMajor(void)
{
	return major;
}

void Student::print(void)
{
	cout << "Name : " << name << "\tAge : " << age << "\tMajor : " << major << "\n";

	return;
}

● main.cpp
#include <iostream>
#include <string>
using namespace std;

#include "human.h"
#include "student.h"

int main()
{
	Human a("춘향", 18);
	Human b("몽룡", 21);
	Human c("사또", 50);

	a.print();
	b.print();
	c.print();

	Student d("명진", 21, "컴퓨터");
	Student e("미현", 22, "경영");
	Student f("용준", 24, "전자");

	d.print();
	e.print();
	f.print();

	return 0;
}
※ 뭐 질문이 없어서, 그냥 손에 잡히는데로 하렵니다.    그나저나 구글의 소스 플러그인은 정말 보기가 좋네요. 


Posted by 지그프리드 지그프리드

댓글을 달아주세요:: 네티켓은 기본, 스팸은 사절

  1. 2012.05.18 21:56
    댓글 주소 수정/삭제 댓글
    c++ 에스프레소 7장부터 11장 까지 exerclse 와 lab좀 해서주실수 있나요정말 어렵네요 군대 갔다 왓더니 모르겟네요 부탁드립니다.
  2. 2012.06.11 08:43 신고
    댓글 주소 수정/삭제 댓글
    C++ 에스프레소의 솔류션을 찾는 유입 키워드가 굉장히 많네요. 도와드릴 용의는 있습니다.
    단, 전체를 요청하기보다, 막히는 문제 한두 문제 정도? 그리고 막히는 부분을 물어봐주세요.
    좋아요 나 View on, 배너 클릭을 좀 해주시면 저도 의욕이 좀 더 나겠죠.
    • jjsj
      2014.05.24 15:06
      댓글 주소 수정/삭제
      C++에스프레소 6장 LAB문제 답좀 알수있을까요...ㅠ
      일단 답을 알고 보면서 공부하고 싶은데...답이없네요 ㅠㅠ

   객체 지향 방법의 최대 목표는 코드의 재사용(reuse)이다. (p.7)
 


●  객체지향의 최대 목표가 코드의 재사용일까? 실제 작업에서는 그 이점을 크게 느끼기는 어렵다. 다른 사람이 만든 코드를 라이브러리로 제공하는 것은 꼭 객체지향방법론에만 적용되는 것은 아니다. jQuery와 같이 JavaScript 같은 언어에서도 라이브러리로 함수 Set을 제공한다. 

  특히, Virtual 및 Interface를 이용한 추상함수의 경우, 함수 상속자가 각각의 함수를 재구현해야 한다. 경험한 바에 따르면, Class를 상속한다고 해서 작업량이 늘 줄어드는 것은 아니다. 

●  객체지향의 가장 큰 장점은, 오히려 각각의 객체간의 완전한 분리를 통한 수정 용이성이 아닐까? 전역변수를 철저하게 배재하고 깔끔하게 독립적으로 돌아가도록 잘 구현한 클래스는 나중에 수정이나 확장할 때도 큰 고민 없이 작업을 시작할 수 있다. 함수의 Overriding, Overloading 기능은 기존 코드를 Side effect 우려 없이 수정할 수 있도록 지원한다. C로 만든 범용 함수를 확장(ex. 함수 인자를 추가 하는 경우)하는 경우와 비교하면 이것은 정말 큰 이점이다. 
Posted by 지그프리드 지그프리드

댓글을 달아주세요:: 네티켓은 기본, 스팸은 사절

  확실히, 개강시즌이라 그런지  "C++  Espresso 해답" 이란 검색어로 들어오는 분들이 많네요. 진도가 어디쯤인지, 과제가 어떤 식인지, 혹은 어떤 부분이 막히는지 남겨주시면 그 부분부터 볼까 합니다. 뭐 교수님도 검색해서 이 블로그를 아시겠지만... 
Posted by 지그프리드 지그프리드

댓글을 달아주세요:: 네티켓은 기본, 스팸은 사절

  1. 2013.09.25 20:10
    댓글 주소 수정/삭제 댓글
    비밀댓글입니다
    • 2013.10.12 16:44 신고
      댓글 주소 수정/삭제
      ㅎㅎ 생각이 너무 많으신 듯 합니다.
      그냥 정수 구간만 생각하시고, 증가도 1씩 한다고 쉽게 생각하세요. 여백은 빈칸으로, 점은 * 로 찍으시면 됩니다.

      앞에 다이아를 이해 하셨으면 어렵지 않습니다. 그래도 모르겠으면 짜신데까지의 코드를 보내주세요
  2. someone
    2013.11.25 15:41
    댓글 주소 수정/삭제 댓글
    chapter 10 lab 문제좀 풀어주세요... 오류가 계속 생기고 뭔소린지 모르겠습니다


BLOG main image
일상, 프로그래밍, IT 그리고 직장생활, Dive, 여행 by 지그프리드

카테고리

Class List (402)
Studies (30)
Exercise & Quizz (10)
Term Project (0)
ECIM list (Help!) (10)
Issues & News (0)
Gossip about IT & Job (22)
Tools (2)
Think about the Justice (23)
Book Review (170)
조엘 온 소프트웨어(번역) (28)
Diary (87)
Vacations (9)
Clash of clans 클래시 오브.. (11)

글 보관함

달력

«   2020/07   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
Total : 320,917
Today : 16 Yesterday : 45