<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                  [小霍同學](http://blog.csdn.net/u012369069)調程序,做的是第11周的[項目1 - 存儲班長信息的學生類](http://blog.csdn.net/sxhelijian/article/details/25141489),但是她寫的程序(就在下面),呃,請讀者自己運行一下吧。(下午在機房調試時用的是Code::Blocks10.05,輸出的是很長的莫名的符號,晚上在家用的是CodeBlocks12.11,典型的內存溢出癥狀。) ~~~ #include <iostream> #include <string> using namespace std; class Stu //聲明基類 { public: Stu(int n, string nam ):num(n),name(nam) {} //基類構造函數 void display( ); //成員函數,輸出基類數據成員 protected: //(*)訪問權限為保護型的數據成員[不能被外界引用但可以被派生類引用] int num; //學生學號 string name; //學生姓名 }; void Stu::display( ) //成員函數,輸出基類數據成員 { cout<<"學號:"<<num<<endl; cout<<"姓名:"<<name<<endl; } class StuDetail: public Stu //聲明派生類StuDetail { public: //學生nam,學號n,a歲,家住ad,他的班長是nam1,學號n1 StuDetail(int n, string nam,int a, string ad,int n1, string nam1); //派生類構造函數 void show( ); //成員函數,輸出學生的信息 void show_monitor( ); //成員函數,輸出班長信息 private: Stu monitor; //學生所在班的班長,班長是學生,是Stu類的成員 int age; //學生年齡 string addr; //學生的住址 }; StuDetail::StuDetail(int n, string nam,int a, string ad,int n1, string nam1):Stu(n,name),monitor(n1,nam1) { age=a; addr=ad; } void StuDetail::show( ) //成員函數,輸出學生的信息 { cout<<"學生信息:"<<endl; cout<<"學號:"<<num<<endl; cout<<"姓名:"<<name<<endl; cout<<"年齡:"<<age<<endl; cout<<"住址:"<<addr<<endl; } void StuDetail::show_monitor( ) //成員函數,輸出班長信息 { cout<<"班長信息:"<<endl; monitor.display(); } int main( ) { //學生王力,10010號,19歲,家住上海的北京路,他的班長是李孫,學號10001 StuDetail s(10010,"Wang-li",19,"115 Beijing Road,Shanghai",10001,"Li-sun"); s.show( ); //輸出學生信息 s.show_monitor(); //輸出班長信息 return 0; } ~~~   老賀及時來幫忙,單步執行是法寶。   在機房調試時用的是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學子成長指導專欄 專欄文章的分類目錄(不定期更新) ==| |== C++ 課堂在線專欄  賀利堅課程教學鏈接(分課程年級) ==| |== 我寫的書——《逆襲大學——傳給IT學子的正能量》    ==| =====?為IT菜鳥起飛鋪跑道,和學生一起享受快樂和激情的大學 ===== ~~~ | |-----|
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看