C++PrimerPlus:第十三章类和继承:ABC理念
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第十三章类和继承:ABC理念
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
ABC理念
引入上篇文章的头文件
//acctabc.h -- bank account classes
#ifndef ACCTABC_H_
#define ACCTABC_H_
#include <iostream>
#include <string>
// Abstract base class
class AcctABC
{
private:
std::string fullName;
long acctNum;
double balance;
protected:
struct Formatting
{
std::ios_base::fmtflags flag;
std::streamsize pr;
};
const std::string& FullName() const { return fullName; }
long AcctNum() const { return acctNum; }
Formatting SetFormat() const;
void Restore(Formatting& f) const;
public:
AcctABC(const std::string& s = "Nullbody", long an = -1,
double bal = 0.0);
void Deposit(double amt);
virtual void Withdraw(double amt) = 0;//pure virtual function
double Balance() const { return balance; }
virtual void ViewAcct() const = 0;//pure virtual function
virtual~AcctABC() {}
};
// Brass Account Class
// Normal account
class Brass : public AcctABC
{
public:
Brass(const std::string& s = "Nullbody", long an = -1,
double bal = 0.0) :AcctABC(s, an, bal) {};
virtual void Withdraw(double amt);
virtual void ViewAcct() const;
virtual ~Brass() {};
};
// BrassPlus Account Class
class BrassPlus : public AcctABC
{
private:
double maxLoan;
double rate;
double owesBank;
public:
BrassPlus(const std::string& s = "Nullbody", long an = -1,
double bal = 0.0,double ml = 500, double r = 0.10);
BrassPlus(const Brass& ba, double ml = 500,
double r = 0.10);
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
提示:以下是本篇文章正文内容,下面案例可供参考
一、ABC理念
ABC理念
1,在处理继承的问题上,RatedPlayer 示例使用的方法比较随意,而ABC方法比它更具系统性、更规范。设计 ABC之前,首先应开发一个模型–指出编程问题所需的类以及它们之间相互关系。一种学院派思想认为,如果要设计类继承层次,则只能将那些不会被用作基类的类设计为具体的类。这种方法的设计更清晰,复杂程度更低。
2,可以将ABC看作是一种必须实施的接口。ABC要求具体派生类覆盖其纯虚函数–迫使派生类遵循ABC设置的接口规则。这种模型在基于组件的编程模式中很常见,在这种情况下,使用ABC使得组件设计人员能够制定“接口约定”,这样确保了从 ABC派生的所有组件都至少支持ABC指定的功能。
总结:
1,对ABC的的设计方法。需要多练习