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 }