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

二,指針和引用

· 共同點:它們都代表其他變量占據的某一塊內存區,通過指針或引用都可以對他們代表的其他變量進行操作。

·? 以下語句利用指針對變量賦值:

int m;   
int *p;  //指針定義
p = &m;  //將m的內存地址賦給p
*p = 5;  // 通過指針對變量m賦值

· 而下面的語句則是利用引用做同樣的事情:

int m;
int &q = m;
q = 5;

·注意上面兩段代碼,&放在等號右側的某個變量前一般是取地址

而在定義變量時,在變量前出現的&符合是引用。

·? 引用只能在定義時被初始化一次,之后不可變;

而指針可變;例如語句 int &q = m 是正確的,但是下面寫法不對:

int &q;
q = m

而且q一旦和m綁定,就不可改變。

而指針不同,指針p可以先指向m,即p = &m;使用完畢后,可以讓p指向其他變量,比如再執行p = &k;

·? 引用不能為空,指針可以空;

因為引用必須再定義時直接初始化,因此引用就不會為NULL,而指針可以是NULL。

可以用指針或引用代表對象

類對象指針和引用的使用

比如:

Account myAccount;
Account &q1 = myAccount;  //q1為Account類引用// 可以定義指針p1,讓p1指向myAccount,使用下面語句Account *p1;
p1 = &myAccount;//類對象指針或引用常常出現在函數的參數表或返回值中

· 利用類對象指針實現轉賬函數:

bool transfer(Account *pA,Account *pB,float m)
{if(pA->withdraw(m) == 1) //若A取款成功{pB->deposits(m); //向B存款return ture;}else return false;
}//調用函數時用下面語句:
transfer(&myAccount,&account[0],1000.0);
//相當于執行下面語句:
pA = &myAccount;
pB = &account[0];
//myAccount和account[0]被修改

·? 下面是利用類對象的引用實現轉載函數:

bool transfer(Account &A,Account &B,float m)
{if(A.withdraw(m) == 1) //若A取款成功{B.deposits(m); //向B存款return true;}else return false;
}
//這個函數和第一個版本的差別僅僅在形式參數中,變量A和B是引用類型。調用函數時使用下面語句:
transfer(myAccount,account[0],1000.0);
//相當于執行下面語句:
Account &A = myAccount;
Account &B = account[0];
//myAccount和account[0]被修改

動態創建對象

如果定義了指針后,不想讓指針指向某個已經定義好的對象,那么可以使用動態創建對象的方法為指針生成一個對象。這時要使用C++語言的new操作符:

Account *pA;
pA = new Account; //動態創建Account對象Account *pB;
pB = new Account[10]; //動態創建10個對象

動態創建的對象只能通過指針使用,因為他們沒有其他名字。比如下面語句輸出公有數據成員:

cout << pA->ID << " " << pA->Name;

當動態創建的對象使用完畢后,C++可以動態的刪除前面的動態創建的對象,這需要使用delete此操作:

delete pA; //刪除和pA關聯的動態對象

注意:只有當沒有其他指針(除pA)指向這個動態對象時,delete才能真正刪除動態對象

對象自身的指針this

每個對象都有一個指向直接的指針---this指針。

當一個函數中的局部變量和類對象的數據成員變量同名時,一定要使用this指針。

class Account
{
public:int ID;char Name[20];float balance;void Initial(int ID,char Name[],float balance);.....
};
void Account::Initial(int ID,char Name[],float balance)
{this->ID = ID ; //將傳入的ID賦給當前對象的IDstrcpy(this->Name,Name); //將傳入的Name賦給當前對象的Namethis->balance = balance ; //將傳入的balance賦給當前對象的balance
}

如果不想使用this,則參數表里的變量一定要換個名字,這時局部變量就不會和類的成員重名,不會有二義性。

?

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

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

相關文章

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

公有成員和私有成員 從訪問權限上分&#xff0c;類的成員又分為&#xff1a;公有成員&#xff08;public&#xff09;、私有成員&#xff08;private&#xff09;和保護成員&#xff08;protected&#xff09;三類。 公有成員用public來說明。這部分成員可以在程序中通過“…

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

構造函數和析構函數 構造函數是一個與類同名的特殊的公有成員函數。 創建類對象時構造函數會被調用&#xff0c;且只調用一次/ 構造函數無返回類型。 默認構造函數格式&#xff1a; 類名&#xff08;&#xff09;{.......} Account(){ //無返回類型&#xff0c;無參數I…

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

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

tensorflow安裝教程

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

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

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

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

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

Python二級筆記(6)

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

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

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

Linux基礎命令(1)

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

Python二級筆記(7)

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

Python二級筆記(8)

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

軟件工程(Rational統一過程)

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

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

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

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

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

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

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

軟件工程(數據流圖)

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

網絡互聯基礎(1)

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

Python二級筆記(9)

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

Python二級筆記(10)

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

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

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