1 /********************************************************************* 2 小技巧: 3 一、在之後的MFC編程中,若是在成員函數中想調用同類中的某個成員,可使用VC++提供的自動列出成員函數功能, 4 使用this->,VC++將列出該類中的全部成員,咱們能夠從列表中選擇咱們想調用的成員。 5 二、自動列出成員函數功能,能夠提升編寫速度,減小拼寫錯誤。咱們常常不能徹底記住某個函數的完整拼寫, 6 但卻可以從列表中辨別出該函數,自動列出成員函數的功能在這時就顯得更加有用了。事實上,在各類IDE編程環境中, 7 咱們一般都不可能記住也沒有必要記住全部的函數,只要將經常使用的函數記住,其餘不經常使用的函數只要記住其大概的寫法和功能, 8 在調用該函數時能夠從自動列出成員函數中選取,這樣能夠大大節省咱們的學習時間。 9 咱們不用花費大量的時間去死記硬背許多函數,利用自動列出成員函數功能和幫助系統, 10 就可以在編程時順利地使用這些函數,等用的次數多了,也就在不知不覺中徹底掌握了這些函數。 11 **********************************************************************/ 12 #include <iostream> 13 using namespace std; 14 class Point 15 { 16 public: 17 int x; 18 int y; 19 /********************************************************************* 20 構造函數能夠用來初始化類內部的成員變量 21 一、構造函數 最重要的做用是建立對象自己 22 二、C++規定,每一個類必須有一個構造函數,沒有構造函數就不能建立對象自己 23 三、C++又規定,若是一個類沒有提供任何的構造函數,則C++提供一個默認的構造函數(由C++編譯器提供), 24 這個默認的構造函數是一個不帶參數的構造函數,它只負責建立對象,而不作任何的初始化工做。 25 四、只要一個類定義了一個構造函數,無論這個構造函數是不是帶參數的構造函數,C++就再也不提供默認的構造函數。 26 也就是說,若是爲一個類定義了一個帶參數的構造函數,還想要無參數的構造函數,則必須本身定義。 27 *********************************************************************/ 28 Point(){ //構造函數,無返回值,能夠帶參數 29 x = 1; 30 y = 2; 31 } 32 /********************************************************************* 33 函數的重載 34 重載構成的條件:函數的參數類型、參數個數不一樣,才能構成函數的重載。 35 **********************************************************************/ 36 Point(int a,int b){ //函數重載 37 x = a; 38 y = b; 39 } 40 /********************************************************************* 41 析構函數 42 一、當一個對象生命週期結束時,其所佔有的內存空間就要被回收,這個工做就由析構函數來完成。 43 二、析構函數是「反向」的構造函數,析構函數不容許有返回值,更重要的是析構函數不容許帶參數, 44 而且一個類中只能有一個析構函數。 45 三、析構函數的做用正好與構造函數相反,對象超出其做用範圍,對應的內存空間被系統收回或被程序用delete刪除時,析構函數被調用。 46 四、根據析構函數的這種特色,咱們能夠在構造函數中初始化對象的某些成員變量, 47 給其分配內存空間(堆內存),在析構函數中釋放對象運行期間所申請的資源。 48 *********************************************************************/ 49 ~Point(){ } //析構函數用於在類對象生命週期結束的時候,釋放類對象的內存空間。析構函數不容許帶參數 50 void outc(){ 51 cout<<"x = "<<x<<endl; 52 cout<<"y = "<<y<<endl; 53 } 54 55 /********************************************************************* 56 this指針 57 一、this指針是一個隱含的指針,它是指向對象自己,表明了對象的地址 58 二、一個類全部的對象調用的成員函數都是同一代碼段。那麼成員函數又是怎麼識別屬於同一對象的數據成員呢? 59 原來,在對象調用pt.output(10,10)時,成員函數除了接受2個實參外,還接受到了一個對象s的地址。 60 這個地址被一個隱含的形參this指針所獲取,它等同於執行this=&pt。 61 全部對數據成員的訪問都隱含地被加上前綴this->。例如:x=0; 等價於 this->x=0。 62 *********************************************************************/ 63 void outc(int x,int y){ 64 this->x = x; 65 this->y = y; 66 } 67 }; 68 69 void main() 70 { 71 Point Pt[2]; 72 //Pt[0].x = 1; 73 //Pt[1].x = 2; 74 //Pt[0].y = 3; 75 //Pt[1].y = 4; 76 77 Pt[0].outc(); 78 Pt[1].outc(5,5); 79 Pt[1].outc(); 80 //cout<<"pt[0]="<<pt[0].x<<endl; 81 //cout<<"pt[1]="<<pt[1].x<<endl; 82 //cout<<"pt[0]="<<pt[0].y<<endl; 83 //cout<<"pt[1]="<<pt[1].y<<endl; 84 }