标签归档:纯虚函数

抽象基类(ABC)的应用

该带码依照 C++ primer plus 第5版 13.6.1应用。

头文件

抽象基类,Brass公有派生类和BrassPlus公有派生类

抽象基类简述

类AcctABC为抽象基类,所谓抽象基类不能生成实例,即不能生成对象。
该类有三个私有成员:分别是名字,银行账户,存款金额。
保护成员方法:显示名字,显示账户,以及显示格式重置函数
公有成员方法:构造函数,存款函数,纯虚取款函数,获取存款金额,纯虚账户信息显示函数,虚拟析构函数(必须设置为虚函数,试指针可以准确定析构对于的对象)

Brass派生类

公有成员方法:构造函数,虚拟取款函数(必须,基类定义为纯虚函数),虚拟账户显示函数(必须,基类定义为纯虚函数),虚拟析构函数

BrassPlus派生类

私用成员:最大贷款金额,贷款利率,还贷金额
公有成员方法: 构造函数,虚拟取款函数(必须,基类定义为纯虚函数),虚拟账户显示函数(必须,基类定义为纯虚函数),虚拟析构函数,以及设置最大贷款金额函数,设置贷款利率函数,设置还贷金额函数。

三个类的头文件

// acctabc.h -- bank account classes
#ifndef ACCTABC_H_
#define ACCTABC_H_

// Abstract Base Class
class AcctABC {
private:
	enum {MAX = 32};
	char fullName[MAX];
	long acctNum;
	double balance;
protected:
	const char * FullName(void) const {return fullName;}
	long AcctNum(void) const {return acctNum;}
	std::ios_base::fmtflags SetFormat(void) const;
public:
	AcctABC(const char * s = "Nullbody", long an = -1, double bal = 0.0);
	void Deposit(double amt);
	virtual void Withdraw(double amt) = 0; 	// pure virtual function
	double Balance(void) const {return balance;}
	virtual void ViewAcct(void) const = 0;	// pure virtual function
	virtual ~AcctABC(void) {}
};

// Brass Account Class
class Brass: public AcctABC {
public:
	Brass(const char * s = "NullBody", long an = -1, 
		double bal = 0.0): AcctABC(s, an, bal) {}
	virtual void Withdraw(double amt);
	virtual void ViewAcct(void) const;
	virtual ~Brass(void) {}
};

// Brass Plus Account Class
class BrassPlus: public AcctABC {
private:
	double maxLoan;
	double rate;
	double owesBank;
public:
	BrassPlus(const char * s = "Nullbody", long an = -1, 
		double bal = 0.0, double ml = 500, 
		double r = 0.1);
	BrassPlus(const AcctABC & ba, double ml = 500, double r = 0.1);
	virtual void ViewAcct(void) const;
	virtual void Withdraw(double amt);
	void ResetMax(double m) {maxLoan = m;}
	void ResetRate(double r) {rate = r;}
	void ResetOwes(void) {owesBank = 0;}
};

#endif//ACCTABC_H_

继续阅读