大家還記得上課的「類別是物件的抽象和概括,而物件是類別的具體和實例」這句話嗎?學會類別的定義之後,下一步就是物件的建立和使用了!
1. 物件的創建:
類別就是包含函數的結構體,是一種自訂資料類型,用它定義出來變量,就是對象,這就是所謂的“對像是類別的具體和實例”,定義了一個這個類別的對象,也可以說實例化了一個對象,就是這個意思!
而物件的使用,和結構體的使用也一樣,都是主要訪問裡面的成員,也都是用過.的方式來訪問,如:
StudentA;A.num=101;strcpy(A.name,dotcpp);A.score=100;A.print();
要注意的是,這裡類別中的成員變數都是宣告為public類型的,如果宣告為private類型,則在主函數中主要透過物件.變數的方式直接存取的話就會被禁止報錯,原因private類型的變數是私有類型,不允許外部存取。
對於想保護但又想控制的私有變量,我們通常將其聲明為private類型,然後同時定義一個public類型的專門賦值的方法,由於內部成員可以訪問private聲明的變量,我們就可以在外部通過這個public的方法來間接控制這些私有的成員,來起到封裝、保護的效果,而這個public型別的方法,也稱之為這個類別的一個外部介面。請大家理解這句話!
2. 物件的指標:
與普通變數一樣,物件也是一片連續的記憶體空間,因此也可以建立一個指向物件的指針,即物件指針,儲存這個物件的位址。
那麼創建方法與使用一般類型的指標類似,定義方法如下:
類別名稱*指標名;
如定義Student *p;定義一個Clock類型的指標p,需要清楚的是,這裡並沒有建立對象,當然也不會呼叫建構子。接下來就可以將一個同類型的類別物件位址賦值給這個指針,然後透過->來存取物件中的成員。
程式碼如下:
Student*p;StudentA;p=&A;p->print();
以上是物件指標的使用方法,除了在賦值、存取成員的時候用以外,在傳參的時候也建議用指標來傳遞,因為其傳遞的為地址,不會進行物件之間的副本賦值,從而減少記憶體的開銷,提高效率。
3. 物件的引用:
引用,是C++中一種新的類型,物件引用就是一個類別物件起個別名,本質上也是把這個類別物件的位址賦給了這個引用類型,兩者是指向一塊記憶體空間的。那麼如何定義使用?下面給大家展示。
StudentA;Student&Aq=A;
如以上程式碼,定義一個Student類型的對象,然後用&來定義一個該類別類型的參考類型,並把A對象賦給Aq作為初始化。
需要注意的是:
1. 與指標一樣,兩者必須是同型別才可以引用。
2. 除非做函數的回傳值或形參時,其餘定義引用型別的同時就要初始化!
3. 引用型別並非是新建立一個對象,因此也不會呼叫建構子。
那麼既然是類別物件的別名,因此使用方法也和類別物件一樣,用別名.成員的方法進行訪問,如:
StudentA;Student&Aq=A;Aq.print();
大家可以看到,用引用型別時,本質還是存的位址,因此無論傳參定義都不會太多記憶體開銷,有指標的優勢,同時使用起來和類別物件本身使用一樣,再做函數實參時,直接傳入引用物件就可以,不用加位址符,因此看起來更直覺、方便。這就是引用類型的優點。