亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

構造函數定義為private或者protected的好處

2020-01-26 15:46:24
字體:
來源:轉載
供稿:網友

將構造函數,析構函數聲明為私有和保護的,那么對象如何創建?已經不能從外部調用構造函數了,但是對象必須被構造,應該如何解決,麻煩大家幫忙說明,關于構造,析構函數聲明為私有和保護時的用法??? 提出這個問題,說明你已經對c++有所思考了。

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

語法上就是這么規定的,你肯定也知道的咯。
那么為什么有時候將構造函數或者析構函數聲明為protected的或者private的?

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

復制代碼 代碼如下:

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

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


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

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

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


上面的代碼是能通過編譯的。上面代碼里的Instance函數就是類A的內部的一個函數。Instance函數體里就構建了一個A的對象。

但是,這個Instance函數還是不能夠被外面調用的。為什么呢?

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

復制代碼 代碼如下:

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();


上面的代碼其實是設計模式singleton模式的一個簡單的C++代碼實現。

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
色爱精品视频一区| 日韩中文字幕在线免费观看| 欧美一区二区影院| 国产欧美 在线欧美| 国产精品视频白浆免费视频| 欧美日韩亚洲视频| 日韩激情av在线播放| 精品国产一区二区在线| 欧美激情三级免费| 97免费视频在线| 亚洲一品av免费观看| 国产精品入口免费视频一| 久久久精品一区二区三区| 国产精品扒开腿做| 日韩在线视频导航| www.xxxx精品| 中文字幕无线精品亚洲乱码一区| 97精品免费视频| 亚洲一区二区三区xxx视频| 久久久久久久一| 国产精品爱啪在线线免费观看| 亚洲精品自拍偷拍| 91网站免费观看| 久久久久久久久久久网站| 久久久久久免费精品| 久久综合五月天| 91精品国产综合久久香蕉最新版| 欧美日韩性视频| 色噜噜狠狠色综合网图区| 亚洲va国产va天堂va久久| 亚洲男人的天堂在线播放| 亚洲国产欧美自拍| 正在播放亚洲1区| 色无极亚洲影院| 黑人与娇小精品av专区| 中文字幕视频一区二区在线有码| 久久久久这里只有精品| 久久精品国产亚洲一区二区| 日韩福利视频在线观看| 亚洲欧美国产日韩天堂区| 国产亚洲欧洲在线| 97视频免费在线看| 亚洲亚裔videos黑人hd| 久久久久亚洲精品国产| 亚洲第一区第一页| 欧美精品日韩三级| 国产欧美日韩中文字幕| 欧美成人免费全部| 精品美女久久久久久免费| 久久成人国产精品| 国产精品午夜一区二区欲梦| 中文字幕在线国产精品| 国产精品久久久久aaaa九色| 尤物九九久久国产精品的特点| 91精品久久久久久久| 欧美激情videos| 亚洲男人的天堂网站| 69国产精品成人在线播放| 欧美精品videossex性护士| 免费97视频在线精品国自产拍| 国产精品久久久久免费a∨| 欧美激情奇米色| 久久99亚洲精品| 日韩av在线一区二区| 亚洲欧美国产精品va在线观看| 麻豆国产va免费精品高清在线| 国产精品白丝av嫩草影院| 亚洲最新在线视频| 大伊人狠狠躁夜夜躁av一区| 色妞欧美日韩在线| 91国产高清在线| 97视频国产在线| 成人午夜激情网| 日韩在线视频网站| 78m国产成人精品视频| 国产精品久久久久久婷婷天堂| 欧美激情一区二区久久久| 欧美国产亚洲视频| 国产精品视频区| 日韩最新免费不卡| 91成人在线视频| 欧美午夜片欧美片在线观看| 欧美精品久久一区二区| 日韩高清人体午夜| 久久久欧美一区二区| 亚洲色图偷窥自拍| 国产中文日韩欧美| 欧美成人免费全部| 日韩国产精品亚洲а∨天堂免| 精品欧美激情精品一区| 国产一区二区黑人欧美xxxx| 国产午夜精品视频| 欧美精品videos另类日本| 日韩在线一区二区三区免费视频| 日韩高清免费观看| 日韩免费av片在线观看| 国产亚洲一区二区精品| 亚洲xxxx做受欧美| 国产精品视频区| 中文字幕日韩免费视频| 疯狂做受xxxx高潮欧美日本| 成人国产精品av| 欧美在线免费视频| 久久久日本电影| 欧美性猛交xxxx黑人| 欧美日韩国产综合新一区| 亚洲级视频在线观看免费1级| 亚洲а∨天堂久久精品9966| 亚洲香蕉成人av网站在线观看| 最近2019年日本中文免费字幕| 国产精品免费视频久久久| 国产精品久久久久久久一区探花| 日韩视频在线观看免费| 欧美国产日产韩国视频| 国产三级精品网站| 欧美影院在线播放| 欧美激情成人在线视频| 欧美在线激情视频| 国产欧美精品日韩精品| 久久人人爽人人爽人人片亚洲| 日韩在线视频中文字幕| 国产精品高潮呻吟久久av无限| 国产精品视频一| 日韩av中文字幕在线| 亚洲福利影片在线| 亚洲男人第一网站| 国产精品自拍视频| 久久天天躁狠狠躁夜夜躁| 亚洲999一在线观看www| 中文字幕欧美日韩va免费视频| 91网站在线看| 亚洲国产天堂网精品网站| 国自在线精品视频| 538国产精品一区二区在线| 日韩电视剧在线观看免费网站| 午夜精品99久久免费| 亚洲天堂日韩电影| 亚洲福利视频二区| 日韩有码在线观看| 日韩一区二区三区国产| 欧美在线影院在线视频| 91产国在线观看动作片喷水| 色999日韩欧美国产| 欧美第一页在线| 日韩电视剧在线观看免费网站| 国产精品青青在线观看爽香蕉| 亚洲永久在线观看| 亚洲欧美精品一区二区| 精品国产一区久久久| 91香蕉国产在线观看| 欧美成人剧情片在线观看| 色综合久久88色综合天天看泰| 草民午夜欧美限制a级福利片| 亚洲一区二区免费在线| 2019中文字幕免费视频| 久久久久久久久久国产精品| 欧美成人精品在线视频| 欧美一级淫片videoshd| 日本免费在线精品| 亚洲最新av在线网站| 欧美大片欧美激情性色a∨久久| 成人免费在线网址| 91国产高清在线| 日韩精品中文字幕久久臀|