我們還要進一步提出問題:
派生類和基類是否有著同樣的行為?
使用虛函式的開銷是難以確定的 。包含虛函式的類中存在虛指標,指向乙個描述虛函式的表。
很簡單,題目就不寫了。
答案:是因為group是直接賦值得到的,沒有申請記憶體,自然也不需要刪除了。
最後附上本章中研究的**前後對比。
最初的**(略有修改):
#include
#include
class vehicle
vehicle(char *p)
~vehicle()
virtual
void identify()
};class car: public vehicle
car(char *p): vehicle(p) {}
void identify()
};class truck: public vehicle
truck(char *p): vehicle(p) {}
void identify()
};class garage;
garage::garage(int max)
}garage::~garage()
int garage::accept(vehicle *veh)
}return -1;
}vehicle* garage::release(int bay)
vehicle *veh = parked[bay];
parked[bay] = null;
return veh;
}void garage::listvehicles()
}}car c1("rvr 101");
car c2("spt 202");
car c3("chp 303");
car c4("bdy 404");
car c5("bch 505");
truck t1("tbl 606");
truck t2("iky 707");
truck t3("ffy 808");
truck t4("pls 909");
truck t5("sly 000");
int main()
經過作者(當然是書的作者了)的分析總結修改,最後的**(運用這些規則後):
#include
#include
class vehicle
;vehicle::vehicle(char *g, char *p)
else
}vehicle::~vehicle()
}void vehicle::identify()
class car: public vehicle
};class truck: public vehicle
};class garage;
garage::garage(int max)
}garage::~garage()
int garage::accept(vehicle *veh)
}return -1;
}vehicle* garage::release(int bay)
vehicle *veh = parked[bay];
parked[bay] = null;
return veh;
}void garage::listvehicles()
}}car c1("rvr 101");
car c2("spt 202");
car c3("chp 303");
car c4("bdy 404");
car c5("bch 505");
truck t1("tbl 606");
truck t2("iky 707");
truck t3("ffy 808");
truck t4("pls 909");
truck t5("sly 000");
int main()
第四章 程式設計
選擇語言的原則 最少的工作量原則 最少技巧性原則 最少錯誤原則 最少維護原則 減少記憶原則 總原則 先求正確後求快 先求清晰後求快 求快不忘保持程式正確性 保持程式整潔以求快 不要因效率而犧牲清晰 好程式標準 易於測試和除錯 易於維護 易於修改 設計簡單 高效率結構化程式設計主要包括兩方面 在編寫程...
第四章 虛函式和多型
第四章 虛函式和多型 多型性與前面提到的資料封裝和繼承性共同構成了物件導向程式設計的三個重要機制。由於函式過載的存在,當程式中出現呼叫同名函式時,編譯器會根據函式的引數型別 個數決定呼叫執行哪乙個同名函式的 這種把乙個函式的呼叫與適當的函式實現 聯絡在一起的過程,叫做聯編。根據聯編的實現階段的不同,...
第四章 函式
樣例1,不帶引數的函式 create or replace function helloworld return varchar2 is begin return 朋友,您好 end 呼叫函式 語句的呼叫 select helloworld from dual 第二種呼叫方法 pl sql塊 beg...