AmOption 同時是 AmOption、Option、Deal、Priceable)。class Deal {};
class Priceable {};
class Option : public Deal, public Priceable {}; // 介面繼承
class AmOption : public Option {}; // 具體實作
class EurOption : public Option {};
AmOption 物件可透過 4 種介面操作。關鍵在於:基類定義「契約」(語法+語義承諾),派生類實現契約(「轉包商」角色)。
Option* b = new AmOption; b->price() 應回傳價格,而非撥電話、列印文件。d->price() 與 b->price()(b 指向同一 d)必須綁定同一實作、回傳相同結果。price()),允許行為差異但語義一致。b->update() 與 d->update() 綁定同一 Option::update),確保不變式。void process(Option* opt) { // 只知 Option 契約
double p = opt->price();
opt->update();
}
// 新增 AsianOption 完全不影響 process()