C++基类和派生

brass.h,Brass为基本银行账户,主要实现输出客户的账户信息以及存取款功能,BrassPlus为在原有基本Brass基础上增加了贷款的功能模块,.h文件为该两种类的声明

#pragma once
#ifndef BRASS_H_
#define BRASS_H_
#include <string>
class Brass
{
private:
	std::string fullName;	//全名
	long acctNum;			//账户号
	double balance;			//余额
public:
	Brass(const std::string& s = "Nullbody", const long an = -1, const double bal = 0.0);
	void Deposit(double amt); //存款
	virtual void Withdraw(double amt); //取款
	double Balance() const;				//提取余额
	virtual void ViewAcct() const;		//账户信息
	virtual ~Brass() {};
};

/****************************************************************************/
class BrassPlus :public Brass//以Brass为基类的派生类
{
private:
	double maxLoan;			//最大贷款额度
	double rate;			//贷款利率
	double owesBank;		//欠款
public:
	BrassPlus(const std::string& s = "Nullbody", const long an = -1, 
		const double bal = 0.0, double ml = 500,
		double r = 0.11125);
	BrassPlus(const Brass& ba, double ml = 500,
		double r = 0.11125);
	virtual void ViewAcct() const;
	virtual void Withdraw(double amt);//取款
	void ResetMax(double m) { maxLoan = m; };
	void ResetRate(double r) { rate = r; };
	void ResetOwes() { owesBank = 0; };
};


#endif // BRASS_H_

brass.cpp

为Brass和BrassPlus两个类中函数的定义

#include <iostream>
#include "brass.h"
using std::cout;
using std::endl;
using std::string;

typedef std::ios_base::fmtflags format;
typedef std::streamsize precis;
format setFormat();
void restore(format f, precis p);

Brass::Brass(const string& s, long an, double bal) 
	:fullName(s), acctNum(an), balance(bal) {};

void Brass::Deposit(double amt)
{
	if (amt < 0)
		cout << "Negative deposit isn't allowed;" << "deposit is cancelled.\n";
	else
		balance += amt;
}

void Brass::Withdraw(double amt)
{
	format initialState = setFormat();
	precis prec = cout.precision(2);
	if (amt < 0)
		cout << " Withdrawal  ammount must be positive;" 
		<< "Withdrawal is cancelled.\n";
	else if (amt <= balance)
		balance -= amt;
	else
		cout << "Withdrawal  ammount of $" << amt 
			 << " exceeds your balance.\n"
			 << "Withdrawal is cancelled.\n";
	restore(initialState, prec);
}

double Brass::Balance() const 
{ 
	format initialState = setFormat();
	precis prec = cout.precision(2);
	return balance; 
}

void Brass::ViewAcct() const
{
	format initialState = setFormat();
	precis prec = cout.precision(2);
	cout << "Client:" << fullName << endl;
	cout << "Account number :" << acctNum << endl;
	cout << "Balance :$" << balance << endl;
	restore(initialState, prec);
}

/****************************************************************************/

BrassPlus::BrassPlus(const std::string& s , const long an ,
					 const double bal , double ml ,
					 double r )
					 :Brass(s,an,bal), maxLoan(ml), owesBank(0.0),rate(r){}

BrassPlus::BrassPlus(const Brass& ba, double ml, double r)
					:Brass(ba), maxLoan(ml), owesBank(0.0), rate(r){}

void BrassPlus::ViewAcct() const
{
	format initialState = setFormat();
	precis prec = cout.precision(2);

	Brass::ViewAcct();

	cout << "Maximum loan: $" << maxLoan << endl;
	cout << "Owed to bank: $" << owesBank << endl;
	cout.precision(3);
	cout << "Load rate :" << 100 * rate << "%\n";
	restore(initialState, prec);
}

void BrassPlus::Withdraw(double amt)
{
	format initialState = setFormat();
	precis prec = cout.precision(2);
	double bal = Balance();


	if (amt < bal)
		Brass::Withdraw(amt);
	else if (amt <= bal + maxLoan - owesBank)
	{
		double advance = amt - bal;
		owesBank += advance * (1.0 + rate);
		cout << "Bank advance : $" << advance << endl;
		cout << "Finance charge : $" << advance * rate << endl;
		Deposit(advance);
		Brass::Withdraw(amt);
	}
	else
		cout << "Credit limit exceeded. Transaction cancelled.\n";

	restore(initialState, prec);
}

format setFormat()
{
	return cout.setf(std::ios_base::fixed, std::ios_base::floatfield);
}
void restore(format f, precis p)
{
	cout.setf(f, std::ios_base::floatfield);
	cout.precision(2);
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值