私有建構函式

2022-04-28 18:54:08 字數 928 閱讀 8128

通常我們都將建構函式的宣告置於public區段,假如我們將其放入private區段中會發生什麼樣的後果?

我們知道,當我們在程式中宣告乙個物件時,編譯器呼叫建構函式(如果有的話),而這個呼叫將通常是外部的,也就是說它不屬於class物件本身的呼叫,假如建構函式是私有的,由於在class外部不允許訪問私有成員,所以這將導致編譯出錯。

你於是說:「哈哈。」我們製造了乙個似乎無法產生物件的class.哦,當然,對於class本身,我們還可以利用它的static公有成員,因為它們獨立於class物件之外,我們不必產生物件也可以使用它們。嗯,看來我們還是為帶有私有建構函式的類找到了乙個存在的理由。不過我們不應當滿足於此,因為看上去應當還有發掘的餘地。 首先我們來認真看一下是不是真的無法建立出乙個具有私有建構函式的類物件。「呃,可能未必。」你現在也許會這樣說。這很好,讓我們再來看看為什麼,沒錯,因為建構函式被class私有化了,所以我們要建立出物件,就必須能夠訪問到class的私有域;但這一點「我們」是做不到的,那麼,誰能做得到呢?class的成員可以做得到;但在我們建構出其物件之前,怎麼能利用它的成員呢?噢,剛才我們剛剛提到了static公有成員,它是獨立於class物件而存在的,當然,它也是公有的,「我們」可以訪問得到。假如在某個static函式中建立了該class的物件,並以引用或者指標的形式將其返回(不可以以值的形式返回,想想為什麼),我們就獲得了這個物件的使用權。

下面是例子:

class wonderfulclass 

private: wonderfulclass()

};int main() 

這個例子使用了私有建構函式,但它執行得很好:makeanobject()作為wonderfulclass的靜態成員函式,盡心盡責地為我們建立物件:由於要跨函式傳遞並且不能使用值傳遞方式,所以我們選擇在堆上建立物件,這樣即使makeanobject()退出,物件也不會隨之蒸發掉,當然,使用完之後你可不要忘了手工將它清除。 

類的建構函式 私有屬性,私有屬性不 絕對 私有

建構函式及其他 class a def init self self.hour 0 self.minute 0 init 為類的建構函式,每次建立類物件時,都會執行建構函式。建構函式 init 會初始化類物件屬性,並且返回none。python類還可以定義其他的特殊方法,這些方法之前 之後都會有雙下...

c 中的私有建構函式

一般建構函式不是私有或者保護成員,但建構函式可以使私有成員函式,在一些特殊的場合,會把建構函式定義為私有或者保護成員。c 類的建構函式一般不應該是私有函式,因為私有函式不能被其他類或者全域性函式所使用。而建立c 例項需要呼叫建構函式。所以如果建構函式是私有函式的話,除了類自己的方法之外,其他類不能構...

私有化建構函式的作用

例如 public class diskutil public static func 這樣的類,往往提供一些靜態的函式來生成該類的例項,只要這個類有公開的屬性 方法,得到例項引用的一方還是可以呼叫的,乙個例子是singleton。外面呼叫只能呼叫diskutil 的靜態函式func,而不能a a ...