小霍同學調程式,做的是第11周的專案1 - 儲存班長資訊的學生類,但是她寫的程式(就在下面),呃,請讀者自己執行一下吧。(下午在機房除錯時用的是code::blocks10.05,輸出的是很長的莫名的符號,晚上在家用的是codeblocks12.11,典型的記憶體溢位症狀。)
#include #include using namespace std;class stu //宣告基類
//基類建構函式
void display( ); //成員函式,輸出基類資料成員
protected: //(*)訪問許可權為保護型的資料成員[不能被外界引用但可以被派生類引用]
int num; //學生學號
string name; //學生姓名
};void stu::display( ) //成員函式,輸出基類資料成員
{ cout<<"學號:"<
在機房除錯時用的是code::blocks10.05,51行定義並初始化物件s沒有問題,順利通過,而在52行s.show(),輸出了莫名的文字。
再次單步,step into到s.show()中,發現混亂來自於39行輸出name的地方。很自然,name的值有問題。name值是通過建構函式獲取的,需要找源頭。問題出在39行,但思維必須得跳出show函式,找到真正的罪犯。
昏花的老眼看30行的建構函式,一眼就看出了冒號後面對基類建構函式的呼叫stu(n,name)有蹊蹺:形式引數中宣告的是(int n, string nam, ...),而實際引數怎麼就出來了(n,name),去年乙個字母e,建構函式的呼叫該為stu(n,nam)。編譯再執行,小霍緊鎖的眉頭放開了。剛才還在怨著計算機的她,應該在反思著自己的大意了。
為何會這樣?錯誤的呼叫,實際上在用未經初始化的基類成員name作實參,那初始化的結果,name成員仍然是那個「野物件」。string是c++中增加的類,其中的字元符串實際也是用指標實現的。未經初始化的物件,其中就有野指標。
寫博文時用的是code::blocks12.11,單步執行時,51行的建構函式就下不去,焦點仍然可以鎖定在派生類的建構函式上,問題仍能解決。
程式設計序,練的就是這番功力。
***************==== 迂者 賀利堅 csdn部落格專欄***************==
|==it學子成長指導專欄
專欄文章的分類目錄(不定期更新)
==||==
賀利堅課程教學鏈結(分課程年級)
==||== 我寫的書——《逆襲大學——傳給it學子的正能量》 ==|
***** 為it菜鳥起飛鋪跑道,和學生一起享受快樂和激情的大學 *****
Hive中找出分組第一的記錄
使用group by進行分組查詢只能獲取分組列以及聚合函式列,如果想要獲取表中非分組列則獲取不到,此時可以使用row number 對分組進行排序,同時也可以獲取非分組列。學生課程分數表,三列 create table student score student id int,學生id subjec...
寫MFC程式過程中的BUG記錄
關於 wdir 轉 string wdir patt wstring ws patt wchar轉char string str ws.begin ws.end 2.assert valid fails with null pointer 錯誤 原因 此錯誤是由於使用了乙個未經初始化的指標導致。由來...
自己寫的乙個多應用程式多目錄的Makefile
dir inc include dir src src dir obj obj dir bin bin includes i i.cc g cflags g wall srv src wildcard srv cpp cli src wildcard cli cpp srv obj patsubst...