最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

構(gòu)造函數(shù)定義為private或者protected的好處

 更新時間:2013年10月09日 10:04:22   作者:  
從語法上來講,一個函數(shù)被聲明為protected或者private,那么這個函數(shù)就不能從“外部”直接被調(diào)用了。對于protected的函數(shù),子類的“內(nèi)部”的其他函數(shù)可以調(diào)用之。而對于private的函數(shù),只能被本類“內(nèi)部”的其他函數(shù)說調(diào)用

將構(gòu)造函數(shù),析構(gòu)函數(shù)聲明為私有和保護的,那么對象如何創(chuàng)建?已經(jīng)不能從外部調(diào)用構(gòu)造函數(shù)了,但是對象必須被構(gòu)造,應(yīng)該如何解決,麻煩大家?guī)兔φf明,關(guān)于構(gòu)造,析構(gòu)函數(shù)聲明為私有和保護時的用法??? 提出這個問題,說明你已經(jīng)對c++有所思考了。

從語法上來講,一個函數(shù)被聲明為protected或者private,那么這個函數(shù)就不能從“外部”直接被調(diào)用了。
對于protected的函數(shù),子類的“內(nèi)部”的其他函數(shù)可以調(diào)用之。
而對于private的函數(shù),只能被本類“內(nèi)部”的其他函數(shù)說調(diào)用。

語法上就是這么規(guī)定的,你肯定也知道的咯。
那么為什么有時候?qū)?gòu)造函數(shù)或者析構(gòu)函數(shù)聲明為protected的或者private的?

通常使用的場景如下:
1。如果你不想讓外面的用戶直接構(gòu)造一個類(假設(shè)這個類的名字為A)的對象,而希望用戶只能構(gòu)造這個類A的子類,那你就可以將類A的構(gòu)造函數(shù)/析構(gòu)函數(shù)聲明為protected,而將類A的子類的構(gòu)造函數(shù)/析構(gòu)函數(shù)聲明為public。例如:

復(fù)制代碼 代碼如下:

class A
{ protected: A(){}
  public: ....
};
calss B : public A
{ public: B(){}
  ....
};

A a; // error
B b; // ok


2. 如果將構(gòu)造函數(shù)/析構(gòu)函數(shù)聲明為private,那只能這個類的“內(nèi)部”的函數(shù)才能構(gòu)造這個類的對象了。這里所說的“內(nèi)部”不知道你是否能明白,下面舉個例子吧。
復(fù)制代碼 代碼如下:

class A
{
private:
    A(){  }
    ~A(){ }

public:
    void Instance()//類A的內(nèi)部的一個函數(shù)
    {
        A a;
    }
};


上面的代碼是能通過編譯的。上面代碼里的Instance函數(shù)就是類A的內(nèi)部的一個函數(shù)。Instance函數(shù)體里就構(gòu)建了一個A的對象。

但是,這個Instance函數(shù)還是不能夠被外面調(diào)用的。為什么呢?

如果要調(diào)用Instance函數(shù),必須有一個對象被構(gòu)造出來。但是構(gòu)造函數(shù)被聲明為private的了。外部不能直接構(gòu)造一個對象出來。
A aObj; // 編譯通不過
aObj.Instance();
但是,如果Instance是一個static靜態(tài)函數(shù)的話,就可以不需要通過一個對象,而可以直接被調(diào)用。如下:

復(fù)制代碼 代碼如下:

class A
{
private:
    A():data(10){ cout << "A" << endl; }
    ~A(){ cout << "~A" << endl; }

    public:
    static A& Instance()
    {
        static A a;
        return a;
    }

    void Print()
    {
        cout << data << endl;
    }

private:
    int data;
};

A& ra = A::Instance();
ra.Print();


上面的代碼其實是設(shè)計模式singleton模式的一個簡單的C++代碼實現(xiàn)。

還有一個情況是:通常將拷貝構(gòu)造函數(shù)和operator=(賦值操作符重載)聲明成private,但是沒有實現(xiàn)體。
這個的目的是禁止一個類的外部用戶對這個類的對象進行復(fù)制動作。
細節(jié)請看《effective C++》里面的條款27。

相關(guān)文章

  • C語言實現(xiàn)按行讀寫文件

    C語言實現(xiàn)按行讀寫文件

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)按行讀寫文件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • C++入門概覽和嘗試創(chuàng)建第一個C++程序

    C++入門概覽和嘗試創(chuàng)建第一個C++程序

    這篇文章主要介紹了C++入門概覽和嘗試創(chuàng)建第一個C++程序,同時也包括編寫類的示例展示C++面向?qū)ο蟮奶匦?需要的朋友可以參考下
    2015-09-09
  • C語言實例問題探究字符串函數(shù)的應(yīng)用

    C語言實例問題探究字符串函數(shù)的應(yīng)用

    字符串函數(shù)(String processing function)也叫字符串處理函數(shù),指的是編程語言中用來進行字符串處理的函數(shù),如C,pascal,Visual以及LotusScript中進行字符串拷貝,計算長度,字符查找等的函數(shù)
    2022-04-04
  • C++實現(xiàn)Dijkstra算法的示例代碼

    C++實現(xiàn)Dijkstra算法的示例代碼

    迪杰斯特拉算法(Dijkstra)是由荷蘭計算機科學(xué)家狄克斯特拉于1959年提出的,因此又叫狄克斯特拉算法。是從一個頂點到其余各頂點的最短路徑算法。本文將用C++實現(xiàn)Dijkstra算法,需要的可以參考一下
    2022-07-07
  • C++結(jié)構(gòu)體案例練習(xí)分享

    C++結(jié)構(gòu)體案例練習(xí)分享

    這篇文章主要和大家分享幾個C++?結(jié)構(gòu)體的案例練習(xí),幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下,希望能夠給你帶來幫助
    2022-04-04
  • C指針原理教程之C快速入門

    C指針原理教程之C快速入門

    C語言作為大學(xué)編程或者計算機專業(yè)的一門必修課,把很多初學(xué)編程的小伙伴都難住了,感覺無從下手,今天呢,我們來簡單介紹下,如何快速入門C語言
    2019-02-02
  • C語言每日練習(xí)之二叉堆

    C語言每日練習(xí)之二叉堆

    這篇文章主要為大家介紹了C語言二叉堆,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • C++ 指向類成員的指針

    C++ 指向類成員的指針

    指向類成員的指針總的來講可以分為兩大類四小類(指向數(shù)據(jù)成員還是成員函數(shù),指向普通成員還是靜態(tài)成員)
    2020-03-03
  • c++算法進階刪除有序鏈表中的重復(fù)元素

    c++算法進階刪除有序鏈表中的重復(fù)元素

    這篇文章主要為大家介紹了c++算法進階刪除有序鏈表中的重復(fù)元素示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • 詳解C++11強類型枚舉

    詳解C++11強類型枚舉

    這篇文章主要介紹了C++11強類型枚舉的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c++11,感興趣的朋友可以了解下
    2020-08-08

最新評論

江孜县| 东源县| 凤台县| 鹤庆县| 滦南县| 苏尼特右旗| 文水县| 明溪县| 连平县| 周至县| 靖边县| 湖口县| 日喀则市| 安泽县| 晋城| 珲春市| 崇左市| 同德县| 那曲县| 张北县| 宣城市| 兴化市| 满城县| 潼关县| 大化| 乐东| 易门县| 孟州市| 洪江市| 永平县| 岳西县| 温泉县| 邵阳县| 成武县| 瑞金市| 元氏县| 视频| 南城县| 娱乐| 民县| 武陟县|