독서 노트 의 4:조건 부 문 구 를 적당 한 유형 에 넣는다.

2576 단어 C++재 구성
요점:다른 대상 의 속성 을 바탕 으로 조건 부 분기 문 구 를 사용 하지 않 는 것 이 좋 습 니 다.사용 하지 않 으 면 대상 자신의 데이터 에 도 사용 해 야 합 니 다.
방법:getCharge()와 getFrequentRenterPoints()를 Movie 류 로 이동 합 니 다.
계승 재 구성 코드 를 사용 하기 전에 rental&movie 코드 는 다음 과 같 습 니 다.
rental.h:
#ifndef RENTAL_H
#define RENTAL_H

#include "movie.h"

class Rental
{
public:
	Rental(Movie movie, int daysRented);
	double getCharge();
	int getDaysRented();
	Movie getMovie();
	int getFrequentRenterPoints();

private:
	Movie _movie;
	int _daysRented;
};

#endif //RENTAL_H

rental.cpp:
#include "rental.h"

Rental::Rental(Movie movie, int daysRented)
{
	_movie = movie;
	_daysRented = daysRented;
}

double Rental::getCharge()
{
	return _movie.getCharge(_daysRented);
}

int Rental::getDaysRented()
{
	return _daysRented;
}

Movie Rental::getMovie()
{
	return _movie;
}

int Rental::getFrequentRenterPoints() 
{
	return _movie.getFrequentRenterPoints(_daysRented);
}

movie.h:
#ifndef MOVIE_H
#define MOVIE_H

#include <string>

using std::string;

class Movie
{
public:
	Movie(string title = "empty", int priceCode = 0);
	double getCharge(int daysRented);
	int getFrequentRenterPoints(int daysRented);
	int getPriceCode();
	void setPriceCode(int arg);
	string getTitle();

public:
	static const int REGULAR;
	static const int NEW_RELEASE;
	static const int CHILDRENS;

private:
	string _title;
	int _priceCode;
};

#endif //MOVIE_H

movie.cpp:
#include "movie.h"

const int Movie::REGULAR = 0;
const int Movie::NEW_RELEASE = 1;
const int Movie::CHILDRENS = 2;

Movie::Movie(string title , int priceCode)
{
	_title = title;
	_priceCode = priceCode;
}

double Movie::getCharge(int daysRented)
{
	double result = 0;

	// determine amounts for each line
	switch(getPriceCode())
	{
	case REGULAR:
		result += 2;
		if (daysRented > 2)
		{
			result += (daysRented - 2) * 1.5;
		}
		break;
	case NEW_RELEASE:
		result += daysRented * 3;
		break;
	case CHILDRENS:
		result += 1.5;
		if (daysRented > 3)
		{
			result += (daysRented - 3) * 1.5;
		}
		break;
	}

	return result;
}

int Movie::getFrequentRenterPoints(int daysRented) 
{

	// add bonus for a two day new release rental
	if ((getPriceCode() == NEW_RELEASE) && daysRented > 1)
		return 2;
	else
		return 1;
}

int Movie::getPriceCode()
{
	return _priceCode;
}

void Movie::setPriceCode(int arg)
{
	_priceCode = arg;
}

string Movie::getTitle()
{
	return _title;
}

좋은 웹페이지 즐겨찾기