程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 結構函數界說為private或許protected的利益

結構函數界說為private或許protected的利益

編輯:關於C++

結構函數界說為private或許protected的利益。本站提示廣大學習愛好者:(結構函數界說為private或許protected的利益)文章只能為提供參考,不一定能成為您想要的結果。以下是結構函數界說為private或許protected的利益正文


將結構函數,析構函數聲明為公有和掩護的,那末對象若何創立?曾經不克不及從內部挪用結構函數了,然則對象必需被結構,應當若何處理,費事年夜家協助解釋,關於結構,析構函數聲明為公有和掩護時的用法??? 提出這個成績,解釋你曾經對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。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved