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,則參數表里的變量一定要換個名字,這時局部變量就不會和類的成員重名,不會有二義性。
?
總結
以上是生活随笔為你收集整理的Qt图形界面编程入门(2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么清除win10的账户密码 Win10
- 下一篇: ros构建机器人运动学模型_ROS入门学