亚洲免费乱码视频,日韩 欧美 国产 动漫 一区,97在线观看免费视频播国产,中文字幕亚洲图片

      1. <legend id="ppnor"></legend>

      2. 
        
        <sup id="ppnor"><input id="ppnor"></input></sup>
        <s id="ppnor"></s>

        計(jì)算機(jī)二級(jí)C++輔導(dǎo):c++默默為您編寫的函數(shù)

        字號(hào):

        這一部分的條款講的都是類的構(gòu)造/析構(gòu)/賦值函數(shù)的使用。
            當(dāng)你寫下一個(gè):
            1 class Empty {};
            經(jīng)過(guò)了編譯器的處理,就好像你寫下了如下的代碼:
            1 class Empty
            2 {
            3 public:
            4   Empty() {}                           //default構(gòu)造函數(shù)
            5   Empty(const Empty& rhs) {}           //copy構(gòu)造函數(shù)
            6   ~Empty() {}                          //析構(gòu)函數(shù)
            7
            8   Empty& operator=(const Empty& rhs) {}//copy assignment操作符
            9 }
            你看,c++編譯器會(huì)在你需要的時(shí)候創(chuàng)建
            1.default構(gòu)造函數(shù)
            2.析構(gòu)函數(shù)
            3.copy構(gòu)造函數(shù)
            4.copy assignment函數(shù)
            這樣一來(lái),你就可以寫如下代碼了:
            1 Empty e1;     //調(diào)用了default構(gòu)造函數(shù)
            2
            3 Empty e2(e1); //調(diào)用了copy構(gòu)造函數(shù)
            4 e2 = e1;      //調(diào)用了copy assignment函數(shù)
            5                 //調(diào)用析構(gòu)函數(shù)
            好吧,知道了有這些函數(shù),可這些函數(shù)用來(lái)干什么?為什么編譯器要寫這些函數(shù)?
            1.default構(gòu)造函數(shù)和2.析構(gòu)函數(shù)主要是給編譯器一個(gè)放置代碼的地方,加入收藏可以用來(lái)調(diào)用基類和non-static成員變量的構(gòu)造函數(shù)和析構(gòu)函數(shù)。
            3.copy構(gòu)造函數(shù)和4.copy assignment函數(shù),編譯器創(chuàng)建的版本只是簡(jiǎn)單的將每一個(gè)non-static成員變量拷貝到目標(biāo)對(duì)象,看下面這個(gè)例子:
            1 using namespace std;
            2
            3 class NameObject
            4 {
            5 public:
            6   NameObject(const char* name, const int& value);
            7   NameObject(const string& name, const int& value);
            8
            9 private:
            10   string nameValue;
            11   int objectValue;
            12 }
            13
            14 NameObject no1("Smallest Prime Number", 2);
            15 NameObject no2(no1);   //以no1.nameValue和no1.objectValue的值設(shè)定no2的值
            16                           //nameValue是string,首先會(huì)調(diào)用string的copy構(gòu)造函數(shù)并以no1.nameValue作為參數(shù)
            17                           //由于objectValue是內(nèi)置int型,所以會(huì)直接將它的每一位拷貝過(guò)去。
            上面的例子是理想的情況,就是每個(gè)變量都是可以直接賦值過(guò)去的,沒(méi)有引用類型和const類型,假如有這兩種類型的成員變量,則會(huì)報(bào)錯(cuò)1 class NameObject
            2 {
            3 public:
            4        NameObject(string& name, const int& value);
            5 private:
            6        string& nameValue;        //引用類型
            7        const int objectValue;    //const類型
            8 };
            9
            10 int main()
            11 {
            12   string newDog("DaHuang");
            13   string oldDog("XiaoGuai");
            14   NameObject p(newDog, 2);
            15   NameObject s(oldDog, 36);
            16   p = s;           //錯(cuò)誤,不能更改non-static的引用成員的指向,不能更改const成員的值
            17                       //所以編譯器提示不能 使用default assignment,并報(bào)錯(cuò)
            18   return 0;
            19   system("PAUSE");
            20 }
            所以,在存在這樣的成員變量時(shí),盡可能自己定義coyy構(gòu)造函數(shù)和copy assignment函數(shù)。