* 朋友們若是覺得本教學對您有幫助,請點個讚~
類別(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 //classB和classA在public區域有同名成員函式cut
{public:
int cut(int a,int b);
};
int classA::cut(int a,int b){return (a-b);} //在類別外才完整地定義函式,稱為對函式的「實做」。 注意:要在類別外實做函式,呼叫函式時需使用 類別名稱::函式名稱 來呼叫,否則若直接用函式名稱(cut)來呼叫,C++無法分辨要呼叫來自classA還是classB的cut。
int main(int argc, char *argv[]) //主函式
{
classA A;
cout<< A.cut(5,2)<<endl;
}
註一:此方法是為了節省類別的撰寫長度,提高程式的可讀性(尤其對於大型程式而言)。
註二:要用此方法,則類別必須寫在主程式之外,而實做函式也必須在主程式之外。
註三:若是private區域的函式,則不能用此方法。
留言列表