close

< C++完整教學目錄 >

 

* 朋友們若是覺得本教學對您有幫助,請點個讚~

 

類別(class結構(struct)很相像,是用來改善結構在使用上容易出現的一些風險。如上述,使用者很容易在結構外部對結構物件成員進行存取:

A.a=5;

為防止使用者不當操作導致出錯,故發展出類別。

類別比結構多了「區域畫分」,即在定義類別時可以將類別分割成三個區域:

public 區域:在此區域中的類別物件成員類別物件成員函式,可以直接被類別外部的程式碼呼叫而進行存取。可以被其他類別繼承

protected 區域:在此區域中的類別物件成員及類別物件成員函式,不能直接類別外部的程式碼呼叫而進行存取。但可以被其他類別繼承

private 區域:在此區域中的類別物件成員及類別物件成員函式,不能直接被類別外部的程式碼呼叫而進行存取。也不能被其他類別繼承

 

外部直接存取

繼承

public 區域

protected 區域

×

private 區域

×

×

(a)例:

class classA   //定義一個類別classA

{public:        //public區域和此區域的成員

int a; //:類別和結構一樣,無法在類別中將類別成員初始化

void set_c(int c_){c=c_;}    //public成員函數設定private區域成員的值,是可行的。

void get_c(){cout<<c<<endl;}   //public成員函數取出private區域成員的值,是可行的。

protected:

int b;

private:

int c;

};   //注意 } 後要加 ;

         

classA A;

A.c=10;  //此行錯誤,private區域中的成員無法在類別外直接存取

A.a=5;   //public區域中的成員可以在類別外直接存取

cout<<A.a<<endl;  //顯示5

A.set_c(10);   //public成員函數設定private區域成員的值

A.get_c(); //public成員函數取出private區域成員的值,顯示10

 

(b)public區域中設定成員函式,可以有不同的設定方法:

class classA 

{public:

int cut(int a,int b);  //public域中,只定義函式傳值、函式名稱、參數列,不寫函式內容。

};

class classB    //classBclassApublic域有同名成員函式cut

{public:

int cut(int a,int b); 

};

int classA::cut(int a,int b){return (a-b);} //在類別外才完整地定義函式,稱為對函式的「實做」。 注意:要在類別外實做函式,呼叫函式時需使用 類別名稱::函式名稱 來呼叫,否則若直接用函式名稱(cut)來呼叫,C++無法分辨要呼叫來自classA還是classBcut

int main(int argc, char *argv[])  //主函式

{

classA A;

cout<< A.cut(5,2)<<endl;

}

註一:此方法是為了節省類別的撰寫長度,提高程式的可讀性(尤其對於大型程式而言)

註二:要用此方法,則類別必須寫在主程式之外,而實做函式也必須在主程式之外。

註三:若private區域的函式,則不能用此方法。

 

 

上一篇:結構(struct)

下一篇:類別(class)建構式

arrow
arrow

    埃伯 發表在 痞客邦 留言(2) 人氣()