cout << "Owed to bank: $" << owesBank << endl:
 cout << "Loan Rate: " << 100 * rate << "%
":
 cout.setf (initialState);
-
void BrassPlus: :Withdraw (double amt)
ios_base : :fmtflags initialState = SetFormat ():
double bal = Balance ():
 if (amt <= bal)
 AcctABC :: 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):
 AcctABC :: Withdraw (amt);
else
 cout << "Credit limit exceeded. Transaction cancelled.
":
 cout.setf (initialState);
保护方法FullName()和AcctNum()提供了对数据成员fullName和acctNum的只读访问,使得可以进
 一步定制每个派生类的 ViewAcct()。
 对Brass和BrassPlus账户的这种新实现,使用方式与旧实现相同,因为类方法的名称和接口都与以前
 样。例如,为使程序清单13.10 能够使用新的实现,需要采取下面的步骤将 usebrass2.cpp 转换为
 usebrass3.cpp:
 ● 使用acctabc.cpp而不是 brass.cpp 来链接 usebrass2.cpp。
 ● 包含文件 acctabc.h,而不是brass.h。
 ● 将“Brass*p_clients[CLIENTS]:”替换为“AcctABC*p_clients[CLIENTS]:”
13.6.2 ABC理念
在处理继承的问题上,RatedPlayer范例使用的方法比较随意,而ABC方法比它更具系统性、更规范。
 设计 ABC之前,首先应开发一个模型 -- 指出编程问题所需的类以及它们之间相互关系。一种学院派思
 想认为,如果要设计类继承层次,则只能将那些不会被用作基类的类设计为具体的类。这种方法的设计更
 清晰,复杂程度更低。
实际应用注意事项:使用ABC实施接口规则
 可以将ABC看作是一种必须实施的接口。ABC要求具体派生类覆盖其纯虛函数––迫使派生类遵術
 ABC所设置的接口规则。这种模型在基于组件的编程模式中很常见,在这种情况下,使用ABC使得组件
 设计人员能够制定“接口约定”,这样确保了从ABC派生的所有组件都至少支持ABC指定的功能。
13.7
继承和动态内存分配
继承是怎样与动态内存分配(使用new和delete)进行互动的呢?例如,如果基类使用动态内存分配,
 并重新定义赋值和复制构造函数,这将怎样影响派生类的实现呢?这个问题的答案取决于派生类的属性。
 如果派生类也使用动态内存分配,那么就需要学习几个新的小技巧。下面来看看这两种情况。