# 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設計乙個...