多态行为
多态性 ( 聚 = many , 莫尔 = form) 是将多种不同形式的对象视为相同对象的能力。
多态性是在 C++ 中通过使用继承和虚拟函数来实现的。 请考虑以下场景: 我们有三种表单 (ExpenseForm, LoanForm, PurchaseForm) 是常规表单的专门化:

每个表单都需要在某个时间打印。 在过程编程中,我们可以编写一个打印函数来处理三种不同的表单,也可以编写三种不同的函数 (printExpenseForm , printLoanForm , printPurchaseForm)。
在 C++ 中,可以更巧妙地实现此目标,如下所示:
class Form {
public:
virtual void print();
};
class ExpenseForm : public Form {
public:
virtual void print();
};
class LoanForm : public Form {
public:
virtual void print();
};
class PurchaseForm : public Form {
public:
virtual void print();
};
将实现其中每个被覆盖的函数,以便正确打印每个表单。 现在,使用表单对象的应用程序可以执行以下操作:
Form* pForm[10]
//create Expense/Loan/Purchase Forms…
for (short i=0 ; i < 9 ; i++)
pForm->print();
在这里,我们将创建十个对象,这些对象可能是 Expense , Loan 和采购表单的任意组合。 但是,由于我们正在处理基类 Form 的指针,因此我们不需要知道我们有哪种形式对象; 将自动调用正确的 print 方法。
基础类中提供了有限的多态行为。 在基类 IccResource 中定义了三个虚拟函数:
virtual void clear();
virtual const IccBuf& get();
virtual void put(const IccBuf&
buffer
);
这些方法已尽可能在 IccResource 的子类中实现:
| 类 | 清除 | 获取 | PUT |
|---|---|---|---|
| IccConsole | × | × | ✓ |
| IccData队列 | ✓ | ✓ | ✓ |
| IccJournal | × | × | ✓ |
| IccSession | × | ✓ | ✓ |
| IccTemp存储 | ✓ | ✓ | ✓ |
| IccTerminal | ✓ | ✓ | ✓ |
这些虚拟方法 不 受 IccResource 的任何子类 (表中的子类除外) 支持。
注: 基本类 IccResource 中 clear , get 和 put 的缺省实现抛出异常,以防止用户调用不受支持的方法。