多态行为

多态性 ( = many , 莫尔 = form) 是将多种不同形式的对象视为相同对象的能力。

多态性是在 C++ 中通过使用继承和虚拟函数来实现的。 请考虑以下场景: 我们有三种表单 (ExpenseForm, LoanForm, PurchaseForm) 是常规表单的专门化:
具有父类 Form 和子类 ExpenseForm, LoanForm和 PurchaseForm 的 Form 类的层次结构

每个表单都需要在某个时间打印。 在过程编程中,我们可以编写一个打印函数来处理三种不同的表单,也可以编写三种不同的函数 (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 的任何子类 (表中的子类除外) 支持。

注: 基本类 IccResourcecleargetput 的缺省实现抛出异常,以防止用户调用不受支持的方法。