1. 程式人生 > >類和物件、訪問限定符、預設成員函式

類和物件、訪問限定符、預設成員函式

1、類的定義,訪問限定符,面向物件封裝性,物件的引用。
    
(1)每個實體都是物件,物件的型別是類,而物件是類的具體例項。類是抽象的,不佔用記憶體,而物件是具體的,佔用儲存空間。
    類是使用者建立的型別,如果程式中要用到類型別,必須根據自己的需要進行宣告,或者使用別人已設計好的類。
    關鍵字class和類名組成類頭,class是宣告類時必須使用的關鍵字,相當於宣告結構體型別時用的struct,最大的花括號內是類體,類體中是類的成員表,包括資料部分和對這些資料進行操作的函式,這就體現了把資料和操作封裝在一起。花括號後的分號後是定義的類的物件。這樣的寫法會導致封裝在類物件中的成員都對外界隱蔽,不能呼叫。這就用到下面說的“訪問限定符”
(2)private和public是成員訪問限定符,private為私有的成員,不能被外部訪問,public為公有成員,既能被本類內的成員函式所引用,也可以被類的作用域內的其他函式引用。還有一種protected,用protected宣告的成員稱為受保護的成員,它不能被類外訪問,但可以被派生類的成員函式訪問。
(3)在面向物件的程式設計中,在宣告類時,一般都是把所有的資料指定為私有的,使它們與外界隔離。把需要讓外界呼叫的成員函式設定為公用的。在類外雖然不能直接訪問私有成員,但是可以通過呼叫公用成員函式來引用甚至修改私有資料成員。
(4)物件成員的引用:第一是“物件名”+“.”+“成員名”;第二是“指向物件的指標”;第三是“物件的引用”
------------------------------------------------------------------------------------------- 
2:預設成員函式及運算子過載
(1)建構函式
    為了“物件的初始化”,c++提出了建構函式,建構函式是一種特殊的成員函式,與其他成員函式不同,它不需要使用者來呼叫它,而是在建立物件時自動執行。建構函式是在宣告類的時候由類的設計者定義的,程式使用者只需在定義物件的同時指定資料成員的初值即可。建構函式的名字必須與類名相同,以便編譯系統能識別為建構函式來處理。它不具有任何型別,不返回任何值。
(2)拷貝建構函式
    拷貝建構函式是一種特殊的建構函式,函式的名稱必須和類名稱一致。
    //建構函式  
    CExample(int b)  
    { a = b;}  
      
    //拷貝建構函式  
    CExample(const CExample& C)  
    {  
        a = C.a;  
    }  
    它必須的一個引數是本型別的一個引用變數
(3)解構函式
    解構函式也是個特殊的成員函式,它的作用和建構函式相反,名字前加~,當物件的生命期結束時,會自動執行解構函式,解構函式的作用不是刪除物件,而是在撤銷物件佔用的記憶體之前完成一些清理工作。一個類可以有多個建構函式,但只能有一個解構函式。
(4)賦值操作符過載
    賦值運算子的過載是對一個已存在的物件進行拷貝賦值。
(5)取地址操作符過載
    一般的賦值運算子過載函式的引數是函式所在類的const型別的引用,加const是因為:我們不希望在這個函式中對用來進行賦值的原版做任何修改;加上const,對於const和非const的實參,函式就能接受,如果不加const,就只能接受非const的實參;用引用是因為這樣可以避免在函式呼叫時對實參的拷貝,提高效率;
    一般返回值是被賦值者的引用,即*this
(6)const修飾的取地址操作符過載
    
-------------------------------------------------------------------------------------------
3:隱含的this指標,及對運算子過載背後做的事情。
    在每個成員函式中都包含一個特殊的指標,這個指標的名字是固定的,就是this指標,它是指向本類物件的指標,它的值是當前被呼叫的成員函式所在的物件的起始地址。例如,當呼叫成員函式a.volume時,系統就把物件a的起始地址賦給this指標,於是在成員函式引用資料成員時,就按照this指標所指的地址找到物件a的資料成員。