1 建構函式能否是虛函式?
多型:根據物件的動態型別來選擇要呼叫的方法。而在建構函式之前,物件甚至都不存在。
建構函式不能是虛函式,在建立乙個物件的時候,建構函式需要的是它要建立的物件的準確的型別,所以不能是虛函式。除此之外,建構函式並不是一般的函式,它跟記憶體管理的互動方式不同於一般的成員函式,所以不能用指標指向建構函式。
vtable是在建構函式中才初始化的,找不到vtable就不可能呼叫。
析構函式可以是虛函式,而且常常如此,由於通常通過基類的指標來銷毀物件,如果析構函式不為虛的話,就不能正確識別物件型別,從而不能正確銷毀物件。
解釋:在類的繼承中,如果有基類指標指向派生類,那麼用基類指標delete時,如果不定義成虛函式,派生類中派生的那部分無法析構。
class a ;
a::a()
a::~a()
class b : public a ;
b::b()
b::~b()
int main(int argc, char* argv)
輸出結果為:delete class b delete class a
如果把a的virtual去掉:那就變成了delete class a
因此在類的繼承體系中,基類的析構函式不宣告為虛函式容易造成記憶體洩漏。
2 多重繼承建構函式如何?虛擬繼承的概念
有可能產生菱形結構,當乙個派生類要使用多重繼承時,必須在派生類和冒號之後列出所有基類的類名。
菱形結構會有乙個模糊問題,不知道應該用哪乙個父類的建構函式或者成員函式。
給出的例項是交通工具派生出汽車和船,然後汽車和船共同派生出水陸兩用車。
需要虛擬繼承技術,當系統碰到多重繼承的時候就會自動先加入乙個vehicle的拷貝,當再次請求乙個vehicle的拷貝的時候就會被忽略,保證繼承類成員函式的唯一性。
構造水陸兩用車的時候,先呼叫交通工具的建構函式,然後分別按照繼承的順序呼叫兩個父類的建構函式。
class vehicle
void setweight(int weight)
virtual void showme() = 0;
protected:
int weight; };
class car:virtual public vehicle//汽車,這裡是虛擬繼承
void showme()
protected:
int aird; };
class boat:virtual public vehicle//船,這裡是虛擬繼承
void showme()
protected:
float tonnage; };
class amphibiancar:public car,public boat//水陸兩用汽車,多重繼承的體現
void showme()
void showmembers()
}; int main()
虛擬繼承的主要目的還是為了避免繼承機制的二義性。第一種二義性是多個基類同名成員函式產生的,這個時候最好使用域操作符制定想要呼叫哪乙個父類的成員函式。 第二種是多個父類的共同基類產生的二義性,就像上面說的,a是b,c的共同基類,d繼承於b,c。也就是菱形的結構,這時候d在建構函式的時候,虛擬繼承可以避免對a的兩次構造函式呼叫。
可以說,基類宣告的虛函式,在派生類中也是虛函式,即使不再使用virtual關鍵字。
乙個函式宣告為純虛後,純虛函式的意思是:我是乙個抽象類!不要把我例項化!純虛函式用來規範派生類的行為,實際上就是所謂的「介面」。它告訴使用者,我的派生類都會有這個函式。
3 電梯演算法:
假設只有一部電梯,採用的方法是狀態機。
電梯可以有三種執行狀態,停止,下行或者上行。
電梯的請求分為內部和外部,內部比外部多乙個flag相互區分,每乙個請求可以是乙個map,儲存的是請求的層數和請求的內容,即是上還是下。
在電梯停止的時候,優先滿足最近層數的請求,無論內部還是外部。
而一旦開始執行之後,根據執行的方向會有乙個優先順序,假如說是向下執行,那麼此時的優先順序順序應該是 近下 遠下 遠上 近上的順序。四種狀態被標準,可以刪除請求或轉換請求。
另外電梯在滿的情況下需要區分內部和外部請求,只滿足內部同向請求。
另外 在前進方向上的請求和背離前進方向的請求應該分別存在兩個list裡面。
愛立信筆試日記
2006 03 7 今天中午在吃飯的時候,接到乙個 是愛立信公司的,她通知我3.9號去遵義路面試.我當時一下子沒反應過來.驚訝 激動 然後是高興.我身邊沒有筆,那位小姐確定了一下我的郵箱位址,說沒問題等下把位址發到我郵箱裡去.回到寢室,我開啟郵箱.時間是中午1 30.嘿嘿,大公司就是不一樣,先是打 ...
愛立信筆試日記
2006 03 7 今天中午在吃飯的時候,接到乙個 是愛立信公司的,她通知我3.9號去遵義路面試.我當時一下子沒反應過來.驚訝 激動 然後是高興.我身邊沒有筆,那位小姐確定了一下我的郵箱位址,說沒問題等下把位址發到我郵箱裡去.回到寢室,我開啟郵箱.時間是中午1 30.嘿嘿,大公司就是不一樣,先是打 ...
愛立信明年推出人肉USB
除了人肉usb,愛立信還為明年準備了很多專案,公司不僅是做乙個電信以及無線裝置公司,而是與開發商合作,推出各種 內容服務,公司現在標榜自己為乙個與矽谷公司平起平坐的尖端科技公司。bhikshesvaran說 很多人都知道愛立信是乙個基站,但終有一天,我們會讓你們知道,愛立信是關於連線人類的 將人體作...