Qt圖形界面編程入門(4)

構造函數和析構函數

構造函數是一個與類同名的特殊的公有成員函數。

創建類對象時構造函數會被調用,且只調用一次/

構造函數無返回類型。

·? 默認構造函數格式:

? 類名(){.......}

Account(){  //無返回類型,無參數ID = 0; //缺省IDstrcpy(Name,""); //缺省賬戶名balance = 0.0; //缺省余額
}

· 帶參數的構造函數。其格式如下:

? 類名(形式參數表){.......}

Account(int ID,char Name[],float balance){this->ID = ID;strcpy(this->Name,Name);this->balance = balance;
}
//這個構造函數的內容和   Qt圖形界面編程入門(3)  中Inital函數完全相同

·? 拷貝構造函數

類名(類名 &c)

這里第一個類名是函數名,第二個類名是說明引用變量c的類型

Account(Account &other){ID = other.ID; //為什么可訪問other的私有成員?strcpy(Name,other.Name);balance = other.balance;
}
//拷貝構造函數,就是創建一個現有對象的副本
//C++規定,在類的成員函數中,不僅僅可利用“對象.變量名”的形式訪問自身所有的數據成員,也可以訪問同一個類的其他對象的所有數據成員

在Account的拷貝構造函數中使用引用類型是因為如果使用普通的類對象做參數,那么該函數調用時會反復不停的創建參數表里的局部對象,引發死循環。

函數重載與構造函數

函數重載是C++的專有概念。

在傳統C語言中要定義在兩個整數,三個整數,兩個實數或者若干整數中求最大值的函數,可定義如下:

int Max2(int, int);// 返回兩個整數中最大值
int Max3(int, int ,int);  //返回三個整數中最大值
//返回兩數中最大值
double MaxD2(double, double);
//返回數組A前n個元素的最大值
int MaxArray(int A[],int n);

在C++中則可以定義為:

int Max(int,int); //返回兩個整數中最大值
int Max(int, int, int); //返回三個整數中最大值
//返回兩個實數中的最大值
double Max(double,double);
//返回數組A前n個元素的最大值
int Max(int A[],int n);

函數重載是指相同的作用域中的函數名稱相同,而參數不同的多個函數并存的現象。

于是在賬戶類中可能程序下面三個構造函數

Account();
Account(int ID,char Name[], float balance);
Account(Account &other);

如何調用構造函數

int main(){char name[20] = "Jack";//  ..........Account a1; //構造函數a1.Initial(10112,name,600.0);Account a2(a1); //調用拷貝構造函數Account a3  //調用默認構造函數
}

構造函數只在對象創建時調用且僅僅調用一次

此后再不能通過“對象.函數名(參數)”的形式調用

對象數組如何調用構造函數

Account C[3];
C[0] = Account(10101,name,500.0);
C[1] = Account(10102,name,1600.0);
C[2] = Account(10103,name,900.0);
//也可以寫成下面形式:
Account C[3] = 
{
Account(10101,name,500.0),
Account(10102,name,1600.0),
Account(10103,name,900.0)
};

動態對象如何調用構造函數

Account *pA;
//動態創建1個對象,調用默認構造函數
pA = new Account;Account *pA,*pB;
//調用帶參的構造函數
pA = new Account(10001,name,500.0);
//調用拷貝構造函數
pB = new Account(*pA);

析構函數的定義和作用

·? 析構函數函數名與類名相同,緊貼再名稱前面用波浪號~與構造函數進行區分,例如:

~Point();

·? 構造函數沒有返回類型,也不能指定參數,因為析構函數只能有一個,不能被重載;

·? 當對象被撤銷時析構函數被自動調用,與構造函數不同的是,析構函數可以被顯式調用,以釋放對象中動態申請的內存。

構造函數的初始化列表

初始化列表是構造函數特有的初始化變量的方式,被訪者構造函數形式參數表最后的)后邊,函數體起始位置的{前面

類的靜態成員

用關鍵字static修飾的數據成員叫做靜態數據成員:

class MyClass{int x;static int count; //static 放在某種類型之前
};
MyClass MemberX,MemberY;
MyClass::m_nCount = 0;

靜態成員函數只能直接訪問類中的靜態成員變量

所有非靜態成員函數均可直接訪問靜態和非靜態的數據成員

靜態成員為類的所有對象所共享

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/534357.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/534357.shtml
英文地址,請注明出處:http://en.pswp.cn/news/534357.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Qt圖形界面編程入門(5)

三,繼承和多態 繼承是定義新類的一種機制,使用這種機制創建新類時只需要聲明新類和已創建類之間的差別 對應一個繼承關系,創建的新類稱為子類,被繼承的類稱為父類或基類。子類可以使用父類定義的屬性和方法,也可以…

tensorflow安裝教程

https://note.youdao.com/ynoteshare1/index.html?iddddc63e6a2dfb70605ae9753bcc71a60&typenote 如果失效請下載文件查看: 鏈接:https://pan.baidu.com/s/15FZETB3rzcpH-LOOpmpjTQ 提取碼:6jfm 如果安裝包找不到請點擊鏈接提取&am…

TensorFlow深度學習應用開發實戰(深度學習簡介和開發環境搭建)

一、深度學習的發展及其應用 1.1 深度學習的發展歷程 1956年,John McCarthy(約翰麥卡錫)等人在美國達特茅斯學院(Dartmounth College)開會探討如何使用機器模擬人的智能時,提出了“人工智能”這一概念。 …

路由與交換技術(鋪墊內容)

一、OSI參考模型 層次 結構 功能 數據 地址 設備 7 應用層 用戶接口 原始文件 主機名 主機 6 表示層 壓縮&a…

Python二級筆記(6)

一、知識點 1,continue語句用于中斷本次循環的執行,繼續執行下一輪循環的條件,表示跳出當前循環;Python中的for、while循環都有一個可選的else語句,如果break語句終止循環,那么else語句將不會執行。 2&am…

瀑布模型、快速原型模型、增量模型、螺旋模型、噴泉模型

一、瀑布模型 1、按照傳統的瀑布模型開發軟件,有下述幾個特點。 ①階段間具有順序性和依賴性 階段間具有順序性和依賴性,這個特點有兩重含義: 1,必須等前一階段的工作完成之后,才能開始后一階段的工作;…

Linux基礎命令(1)

1.強大好用的Shell Shell是一個命令工具。Shell(也稱終端或殼)充當的是人與內核(硬件)之間的翻譯官,用戶把一些命令“告訴”終端,它會調用相應的程序服務去完成某些工作。 現在紅帽系統在內的許多主流Lin…

Python二級筆記(7)

知識點: 1,鏈式存儲結構既可以針對線性結構也可以針對非線性結構,鏈式存儲結構中每個結點都由數據域與指針域兩部分組成,增加了存儲空間。 2,對象的基本特點:標識唯一性,分類性,多…

Python二級筆記(8)

知識點: 1,棧支持子程序調用。棧上一種只能在一端進行插入或刪除的線性表,在主程序調用子函數時要首先保存主程序當前狀態,然后轉去執行子程序,最終把子程序的執行結果返回到主程序中調用子程序的位置,繼續…

軟件工程(Rational統一過程)

Rational統一過程(Rational Unified Process,RUP)是由Rational軟件公司推出的一種完整而且完美的軟件過程。 RUP總結了經過多年商業化驗證的六條最有效軟件開發經驗,這些經驗被稱為“最佳實踐”。 1,最佳實踐 (1&am…

軟件工程(敏捷過程和極限編程)

1,敏捷過程 為了使軟件開發團隊具有高效工作和快速響應變化的能力,17位著名的軟件專家于2001年2月聯合起草了敏捷軟件開發宣言。 敏捷軟件開發宣言由下述4個簡單的價值觀聲明組成。 (1)個體和交互勝過過程和工具 優秀的團隊成…

軟件工程(可行性研究講解)

可行性研究 可行性研究的目的,就是用最小的代價在盡可能短的時間內確定問題是否能夠解決。(只是尋找客戶所提需求的解決方案,能干還是不能干的問題。) 可行性研究實質上是要進行一次大大壓縮簡化了的系統分析和設計的過程。 GB…

軟件工程(系統流程圖講解)

系統流程圖是概括地模型物理系統的工具。 基本符號 系統符號 系統流程圖的習慣畫法是使信息在圖中從頂向下或從左到右流動。 例子 某裝配廠有一座存放零件的倉庫,倉庫中現有的各種零件的數量以及每種零件的庫存量臨界值等數據記錄在庫存清單主文件中。當倉庫中零…

軟件工程(數據流圖)

數據流圖有4種基本符號: 正方形或(立方體)表示數據的源點或者終點; 圓角矩形(或圓形)代表變換數據的處理; 開口矩形(或兩條平行橫縣)代表數據存儲; 箭頭表…

網絡互聯基礎(1)

網絡互聯的基本概念 計算機網絡起始于20世紀60年代,當時網絡的概念主要是基于主機(Host)架構的低速串行(Serial)連接,提供應用程序執行、遠程打印和數據服務功能。IBM的系統網絡架構(System Network Architecture,SNA)于非IBM公司的X.25公用…

Python二級筆記(9)

知識點: 1,算法的空間復雜點是指算法在執行過程中所需要的內存空間。 2,結構化程序設計的思想包括:自頂向下、逐步求精、模塊化,限制使用goto語句。 3,字典中的“鍵”可以是整數或者字符串,但…

Python二級筆記(10)

知識點: 1,線性表的鏈式存儲結構中每個結點都由數據域與指針域兩部分組成,增加了存儲空間,所以一般要多于順序存儲結構。 2,軟件測試是為了發現錯誤而執行程序的過程,測試要以查找錯誤為中心。 3&#x…

Qt圖形界面編程入門(6)

類的私有繼承方式 ①基類公有成員和保護成員都作為私有成員被派生類繼承,派生類自身的函數可直接訪問他們,但是派生類對象則只能通過本類的公有函數間接地訪問它們。 ②基類的私有成員成為派生類中更加封閉的私有成員,派生類內部成員函數也…

Qt圖形界面編程入門(7)

派生類的構造函數和析構函數 基類的構造函數和析構函數不能被繼承。 在派生類中,如果派生類新增的成員進行初始化,就必須加入新的構造函數。與此同時,對所有從基類繼承下來的成員的初始化工作還是由基類的構造函數完成,必須在派…

Python二級筆記(11)

知識點: 1,在棧中,棧頂指針top動態反映了棧中元素的變化情況,在循環隊列中,隊尾指針和隊頭指針的動態變化決定隊列的長度,在鏈式存儲結構中.無論是循環鏈表還是線性鏈表,插入和刪除元素時&…