類_構造函數_析構函數_函數重載_this指針

 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 }
相關文章
相關標籤/搜索