1.抽象基类提供了统一的借口,用于处理各种不同的派生类。

2.抽象类将实现的责任交给了派生类。

 

 1 float ComputeNetWorth(const TPersonalAsset *assets[], unsigned size)
 2 {
 3     //assets-该数组中包含指向TPersonalAsset类对象的指针
 4     //size-该数组中包含的元素个数
 5 
 6     float totalWorth = 0.0;
 7 
 8     /*资产数组的每个位置都指向一个某类型的TPersonalAsset类对象的指针。
 9       我们希望通过该对象调用ComputeNetWorth方法。
10       动态绑定机制将为该对象选择正确的方法*/
11 
12     for (int i = 0; i < size; i++)
13         /*在该位置通过资产对象调用虚方法
14           assets[i]是一个指向TPersonalAsset类对象的指针。
15           为totalWorth添加worth的返回值。为数组中所以的对象重复该步骤。*/
16         if (assets[i] != 0)
17             totalWorth += assets[i]->ComputeNetWorth();
18     return totalWorth;
19     
20 }

 

其中一个派生类的实现:

 1 class TAutomobileAsset :public TPersonalAsset
 2 {
 3 public:
 4     TAutomobileAsset(float originalPrice, const char licence[], const char date[], float loanAmount);
 5     
 6     virtual bool IsInsurable() const;
 7     virtual float ComputeNetWorth() const;
 8 
 9 private:
10     float _purchasePrice;
11     TString _licesePlate;
12     float _amountOwed;
13 };
14 
15 TAutomobileAsset::TAutomobileAsset(float originalPrice, const char licence[], const char date[], float loanAmount)
16     :TPersonalAsset(date),_licencePlate(licence),_amountOwed(loanAmount),_purchasePrice(originalPrice)
17 {
18 
19 }
20 
21 float TAutomobileAsset::ComputeNetWorth() const
22 {
23     /*此处为计算净值的代码*/
24     return _purchasePrice;
25 }

 

posted on 2017-03-23 10:50  郑哲  阅读(410)  评论(0编辑  收藏  举报