C 只能例項化乙個物件的類

2021-07-05 23:07:36 字數 1793 閱讀 1057

# include 

# include

using

namespace

std;

1.建立類

class student

;

2.類外實現

//初始化靜態成員資料

student* student::total

=null;

student::student(string nam =

"0",int ag =

0)student* student::limit() //功能:只能通過此函式呼叫建構函式進行初始化,然後返回唯一物件位址

return total;

}void student::display()

3.程式入口

int main()

4.講解

根據上面這段**,要想在程式中只許建立乙個student類物件,呼叫靜態成員函式limit()即可。

例如:

student myobj(「ss」,12); // 編譯出錯 - 因為建構函式是 private

// 獲得指向類物件指標的正確方法

student* pmyobj1 = student::limit();

// 下面的語句不會建立新的類物件,它所建立的物件指標pmyobj2與上面建立的pmyobj1指標是一樣的,

// 也就是說pmyobj1和pmyobj2所指的物件是一樣的

student* pmyobj2 = student::limit();

/****************************************分割線(2015.10.19)*************************************/

5.簡化版(增強版)

1.將類型別的指標是否為空作為判斷條件

2.解決銷毀物件之後不能建立物件問題,設定析構函式將 total初始化為null;上面的那個程式對應將bool型別的值 true轉為false ,false轉為true

3.解決拷貝建構函式建立物件的問題

若主函式通過以下方式來例項化物件,會報錯,拷貝建構函式為私有,不能訪問

student c(*a);              /通過拷貝建構函式建立物件。這樣會報錯

c.display();

class student

;student* student::total = null;

// 1.增加之處

student::~student()

student::student(string nam = "0",int ag = 0)

student* student::limit()

// 2.更改之處,改為用指標是否為空作為判斷條件比上乙個更好理解

if (null == total)

return total;

}void student::display()

結果:

名字:0

年齡:0

00419488

名字:0

年齡:0

00419488

主函式建立的「兩個物件」儲存位址是完全一致的,所以實質只例項化了乙個物件

定義乙個類讓其只能例項化乙個物件

乙個類只例項化出乙個物件稱為單例模式 include class singleclass else private singleclass static int count 靜態成員變數count,不允許在類中初始化。定義為const則可以在這初始化,但是不可更改,不適合在這使用 int singl...

只能生成乙個例項的類

這次遇到的是乙個c 問題,本著迎難而上精神雖然c 不熟但是盤它就行了。問題如下 用linux編譯c 需要先搭建環境,那就先搭建乙個吧。搭建環境有好多坑,根據以下內容可以完成並且解決各種問題 還有就是4版本以上的,只能用mcs命令編譯 搭建好之後可以開始寫 了,對c 不太熟悉先了解一些基礎概念 1 s...

C 學習物件導向 例項化建立乙個類

目錄 c 學習物件導向 例項化建立乙個類 案例1 設計乙個圓類,求其周長 案例2 設計乙個學生類,屬性有姓名和學號,可以給姓名和學號賦值 includeusing namespace std const double pi 3.14 設計乙個圓類,求圓的周長 圓周長 2 pi r class設計乙個...