析構函數與構造函數一般是同一個話題。構造函數與析構函數的執行順序剛剛好相反。在類裏面的繼承關係更爲之顯著。
class Studnet{
Student(int s,int n){...}
~Student(){cout<<"Student XG";}
};
class Universe:public Student{
public:
Universe(int q,int w){...}
~Universe(){cout<<"Universe XG";}
}; //構造函數的執行順序是 基類->子類;析構函數的執行順序是 子類—>基類;需要提醒的是這個是對於子類與基類的關係; 對於兩個不相關的類的
對於c++基礎,貫徹全部內容的就是 析構函數和構造函數 的執行順序【(當然像 繼承 封裝 多態;還是再簡單的提及一下吧,畢竟這是博文寫的就是c++學習筆記)
繼承 :private(私有繼承),protected(保護基礎),public(公有繼承)
class A{ private:.........
public:.......
protected:.......};
class B:privatA{ private:.........
public:.......
protected:.......}; //基礎的就不說了,說些需要注意的:無論是私有還是公有還是保護繼承,基類的私有始終只是基類所特有的(即無法繼承private的東西)。你繼承來的只能是基類裏protected,和 public 的;
public繼承基類裏的公有和保護的(public 繼承,基類 公有的還是繼承爲公有的,私有的還是繼承爲私有的);
protected繼承:基類裏的public 和protected 到了 派生類 就變成 protected;
private繼承:基類裏的public和protected 到了派生類就成 private;
(繼承是把基類的以 protected(例如) 把全部(基類的public和protected)可以繼承的 繼承爲 (protected));
多態:說白了就是重載和虛函數(virtual)
回到正題:析構函數 和構造函數的順序
以爲後頭的很多虛函數 普通函數 重載函數 。。。運算符重載 。。。。繼承。。。。。
都有很多的 析構函數和構造函數的考究
記得你頭疼,但是呢你知道原理之後一切就變得有趣了,有規律可循;
c++是一種編譯環境 不是一門語言(這句話是一位;老師強調的,因爲c++延續了很多c語言的語法,而且很多語法都可以用,是編譯器裏寫好的一些規則,對這句話有異議的可以留言大家探討下)
噢對了那個規律呢,就是你要知道 編譯器是怎麼解讀 c++代碼的: windows 系統的 vc++6.0 和 linux 的gcc 都是目前最流行的c++編譯器,他對析構函數的存儲呢
是用堆棧的形式 ;在main函數裏,你生成一個對象就把析構函數入棧。等到你程序跑完,return 0;
後 就開始讀取堆棧裏的析構函數對對象進行析構;離return 語句最近的那個 對象是最後才入棧的,先進後出。所以他是最先進行析構的;(講了這麼多呢要講的就是這個,其它的具體規則都可以在網上搜索到,所以我說的只是這個思想)