Qt图形界面编程入门(4)
構(gòu)造函數(shù)和析構(gòu)函數(shù)
構(gòu)造函數(shù)是一個(gè)與類(lèi)同名的特殊的公有成員函數(shù)。
創(chuàng)建類(lèi)對(duì)象時(shí)構(gòu)造函數(shù)會(huì)被調(diào)用,且只調(diào)用一次/
構(gòu)造函數(shù)無(wú)返回類(lèi)型。
·? 默認(rèn)構(gòu)造函數(shù)格式:
? 類(lèi)名(){.......}
Account(){ //無(wú)返回類(lèi)型,無(wú)參數(shù)ID = 0; //缺省IDstrcpy(Name,""); //缺省賬戶(hù)名balance = 0.0; //缺省余額 }· 帶參數(shù)的構(gòu)造函數(shù)。其格式如下:
? 類(lèi)名(形式參數(shù)表){.......}
Account(int ID,char Name[],float balance){this->ID = ID;strcpy(this->Name,Name);this->balance = balance; } //這個(gè)構(gòu)造函數(shù)的內(nèi)容和 Qt圖形界面編程入門(mén)(3) 中Inital函數(shù)完全相同·? 拷貝構(gòu)造函數(shù)
類(lèi)名(類(lèi)名 &c)
這里第一個(gè)類(lèi)名是函數(shù)名,第二個(gè)類(lèi)名是說(shuō)明引用變量c的類(lèi)型
Account(Account &other){ID = other.ID; //為什么可訪(fǎng)問(wèn)other的私有成員?strcpy(Name,other.Name);balance = other.balance; } //拷貝構(gòu)造函數(shù),就是創(chuàng)建一個(gè)現(xiàn)有對(duì)象的副本 //C++規(guī)定,在類(lèi)的成員函數(shù)中,不僅僅可利用“對(duì)象.變量名”的形式訪(fǎng)問(wèn)自身所有的數(shù)據(jù)成員,也可以訪(fǎng)問(wèn)同一個(gè)類(lèi)的其他對(duì)象的所有數(shù)據(jù)成員在Account的拷貝構(gòu)造函數(shù)中使用引用類(lèi)型是因?yàn)槿绻褂闷胀ǖ念?lèi)對(duì)象做參數(shù),那么該函數(shù)調(diào)用時(shí)會(huì)反復(fù)不停的創(chuàng)建參數(shù)表里的局部對(duì)象,引發(fā)死循環(huán)。
函數(shù)重載與構(gòu)造函數(shù)
函數(shù)重載是C++的專(zhuān)有概念。
在傳統(tǒng)C語(yǔ)言中要定義在兩個(gè)整數(shù),三個(gè)整數(shù),兩個(gè)實(shí)數(shù)或者若干整數(shù)中求最大值的函數(shù),可定義如下:
int Max2(int, int);// 返回兩個(gè)整數(shù)中最大值 int Max3(int, int ,int); //返回三個(gè)整數(shù)中最大值 //返回兩數(shù)中最大值 double MaxD2(double, double); //返回?cái)?shù)組A前n個(gè)元素的最大值 int MaxArray(int A[],int n);在C++中則可以定義為:
int Max(int,int); //返回兩個(gè)整數(shù)中最大值 int Max(int, int, int); //返回三個(gè)整數(shù)中最大值 //返回兩個(gè)實(shí)數(shù)中的最大值 double Max(double,double); //返回?cái)?shù)組A前n個(gè)元素的最大值 int Max(int A[],int n);函數(shù)重載是指相同的作用域中的函數(shù)名稱(chēng)相同,而參數(shù)不同的多個(gè)函數(shù)并存的現(xiàn)象。
于是在賬戶(hù)類(lèi)中可能程序下面三個(gè)構(gòu)造函數(shù)
Account(); Account(int ID,char Name[], float balance); Account(Account &other);如何調(diào)用構(gòu)造函數(shù)
int main(){char name[20] = "Jack";// ..........Account a1; //構(gòu)造函數(shù)a1.Initial(10112,name,600.0);Account a2(a1); //調(diào)用拷貝構(gòu)造函數(shù)Account a3 //調(diào)用默認(rèn)構(gòu)造函數(shù) }構(gòu)造函數(shù)只在對(duì)象創(chuàng)建時(shí)調(diào)用且僅僅調(diào)用一次
此后再不能通過(guò)“對(duì)象.函數(shù)名(參數(shù))”的形式調(diào)用
對(duì)象數(shù)組如何調(diào)用構(gòu)造函數(shù)
Account C[3]; C[0] = Account(10101,name,500.0); C[1] = Account(10102,name,1600.0); C[2] = Account(10103,name,900.0); //也可以寫(xiě)成下面形式: Account C[3] = { Account(10101,name,500.0), Account(10102,name,1600.0), Account(10103,name,900.0) };動(dòng)態(tài)對(duì)象如何調(diào)用構(gòu)造函數(shù)
Account *pA; //動(dòng)態(tài)創(chuàng)建1個(gè)對(duì)象,調(diào)用默認(rèn)構(gòu)造函數(shù) pA = new Account;Account *pA,*pB; //調(diào)用帶參的構(gòu)造函數(shù) pA = new Account(10001,name,500.0); //調(diào)用拷貝構(gòu)造函數(shù) pB = new Account(*pA);析構(gòu)函數(shù)的定義和作用
·? 析構(gòu)函數(shù)函數(shù)名與類(lèi)名相同,緊貼再名稱(chēng)前面用波浪號(hào)~與構(gòu)造函數(shù)進(jìn)行區(qū)分,例如:
~Point();
·? 構(gòu)造函數(shù)沒(méi)有返回類(lèi)型,也不能指定參數(shù),因?yàn)槲鰳?gòu)函數(shù)只能有一個(gè),不能被重載;
·? 當(dāng)對(duì)象被撤銷(xiāo)時(shí)析構(gòu)函數(shù)被自動(dòng)調(diào)用,與構(gòu)造函數(shù)不同的是,析構(gòu)函數(shù)可以被顯式調(diào)用,以釋放對(duì)象中動(dòng)態(tài)申請(qǐng)的內(nèi)存。
構(gòu)造函數(shù)的初始化列表
初始化列表是構(gòu)造函數(shù)特有的初始化變量的方式,被訪(fǎng)者構(gòu)造函數(shù)形式參數(shù)表最后的)后邊,函數(shù)體起始位置的{前面
類(lèi)的靜態(tài)成員
用關(guān)鍵字static修飾的數(shù)據(jù)成員叫做靜態(tài)數(shù)據(jù)成員:
class MyClass{int x;static int count; //static 放在某種類(lèi)型之前 }; MyClass MemberX,MemberY; MyClass::m_nCount = 0;靜態(tài)成員函數(shù)只能直接訪(fǎng)問(wèn)類(lèi)中的靜態(tài)成員變量
所有非靜態(tài)成員函數(shù)均可直接訪(fǎng)問(wèn)靜態(tài)和非靜態(tài)的數(shù)據(jù)成員
靜態(tài)成員為類(lèi)的所有對(duì)象所共享
總結(jié)
以上是生活随笔為你收集整理的Qt图形界面编程入门(4)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 导线接线头抗拉强度与原导线抗拉强度相同(
- 下一篇: xodo上的笔记不见了_一起来“终极笔记