談?wù)刢++的初始化工作(2)

字號:

我們首先來看上次遺留的問題。
    把(1)中的代碼換為注釋部分,或許您一時還認識不到會有什么發(fā)生,但最終是通不過的,調(diào)試拋出異常,信息如下:
    未處理的“System.Runtime.InteropServices.SEHException”類型的異常出現(xiàn)在 TestInit.exe 中
    其他信息:外部組件發(fā)生異常。
    This application has requested the Runtime to terminate it in an unusual way.
    Please contact the application's support team for more information.
    Press any key to continue
    我想,您回頭再細看的話,就會明白為什么如此了(我們寫程序一定要追問到底:)。
    我們今天要談的是,一些變量只有的初始化形式,通過例子,告訴您要特別注意。然后,我們就一步一步,來看資源淺拷貝的問題。我相信初學(xué)c++的同學(xué),會對“拷貝函數(shù)”有些疑問,它就是為了解決上述問題的;但事實上,還有一個隱藏的地方,今天我也想給您指出。
    這些程序,可是我特意設(shè)計的哦。希望可以很方便的認識問題所在,與解決之道。
    首先,看第一個例子。在類中,這兩類變量:
    e.g.
    Name &name; //引用
    const int ID; //常量
    它們的初始化形式是的。而且必須由您來初始化。
    看下面的程序:
    //human.h
    #pragma once
    class Name
    {
    char *name;
    public:
    //...
    };
    class Human
    {
    Name &name;
    const int ID;//每個人都的標志號
    //...
    public:
    Human(void);
    ~Human(void);
    //...
    };
    //human.cpp
    #include "human.h"
    #using
    //默認的構(gòu)造函數(shù)
    Human::Human(void)
    {
    }
    Human::~Human(void)
    {
    }
    寫一個主文件測試。
    但調(diào)試出錯,錯誤信息文件為:
    /*----------------------------------------------------------------------------
    //Human:error file
    ------ 已啟動生成:項目:TestInit, 配置:Debug Win32 ------
    正在編譯...
    Human.cpp
    Human.cpp(5) : error C2758: “Human::name” : 必須在構(gòu)造函數(shù)基/成員初始值設(shè)定項列表中初始化
    e:NETSmall_codeTestInitHuman.h(13) : 參見“Human::name”的聲明
    Human.cpp(5) : error C2758: “Human::ID” : 必須在構(gòu)造函數(shù)基/成員初始值設(shè)定項列表中初始化
    e:NETSmall_codeTestInitHuman.h(14) : 參見“Human::ID”的聲明
    fmain.cpp
    Date.cpp
    正在生成代碼...
    生成日志保存在“file://e:NETSmall_codeTestInitDebugBuildLog.htm”中
    TestInit - 2 錯誤,0 警告
    ---------------------- 完成 ---------------------
    生成:0 已成功, 1 已失敗, 0 已跳過
    --------------------------------------------------------------------------------
    */
    因為這里涉及的是僅僅的c++語法,我就不多費口舌了,如何改正,希望您能動手試試,一定要動手,不要想當(dāng)然哦~~~
    當(dāng)然,如果您是愛問題的人,我想您可以這樣深究一下:設(shè)計c++語言時,為什么諸如int類型成員變量能提供默認初始化,而它們卻不能;從編譯角度,刻意給它們提供如int類型般的初始化會有什么困難和問題?