淺談C++的class (初學者請看) 高手老手不用浪費網費 (轉)
作為面向設計的基礎,掌握class的基本結構和特性是十分重要的。
:namespace prefix = o ns = "urn:schemas--com::office" />
1. 如何實現一個class
class egclass {
public:
//public提供了一組公開的操作和運算子
//這些公開的操作函式和運算子被稱為member functions
//宣告或定義constructor(建構函式)和destructor(解構函式)
private:
//私有的實現細節
//member functions的定義部分
//宣告data members
//也可以初始化 data members 一般初始化data member的部分放在constructor裡
}
所有的member functions都必須在class裡宣告,至於是否同時給出定義,可自行決定。如果在class主體內定義,這個member functions將被視為inline函式(注:inline函式相當與一個宏)。如果在class體外定義一個member functions必須使用特殊的語法指明其屬於哪個class。如果希望該函式為一個inline函式,應在最前面指定關鍵字inline。
Inlne bool stack::empty()
{
//定義member functions
}
上例就指明empty()是class stack的一個member functions。Class名後的兩個冒號(stack::)被稱為class pe resolution(類範圍決議)運算子。用來指明該member functions
是屬於哪個class的。
2. Constructors(建構函式)和destructors(解構函式)
Constructors是用來初始化data members的。會在每次class 被定義時,constructors來初始化data members。
Constructors的函式名必須與class名稱相同。而且constructors不應指定返回值,且不需要返回任何值。它可以overloaded(過載)。最為class的一個member functions它是可以被定義在class體外的。
egclass::egclass(); //這是一個最簡單的constructor
Destructor時一個與constructors相對的member functions。其定義是由自行決定的。
如果class中有提供destructors 。當object結束生命時,編譯器會自動呼叫destructors。desrructor是主要用來釋放在constructors中或是物件執行週期中的資源。
Destructors命名是十分嚴格的,其函式名必須是class名稱加上‘~’。它不帶任何引數,也不返回任何值。更不可能overloaded。eg:
~egclass()
{
//具體實現部分
}
Member Initialization List (成員初值表)
一般constructors初始化data member有兩種方法,一種是在函式體 內
egclass::egclass (const egclass &rhs)
{
_data_member1=rhs._data_member1;
_data_member2=rhs._data_member2;
}
而另一種初始化語法就是所謂的Member Initialization List (成員初值表):
egclass::egclass (const egclass &rhs): _data_member1(rhs._data_member1),
_data_member2(rhs._data_member2)
{} //注意 函式體是空的
3. const(不變)和mutable(可變)
當一個函式呼叫一個class時,我們可以這樣來保證這個class不被改動:
int sum( const egclass &class1)
{
//具體實現部分
}
但是如果sum呼叫了這個class的一個member functions,那這個class的值就有可能被它的一個member functions所修改。為了能讓這個class的值不被它的member functions所修改。我們必須在member functions上標註const,來告訴編譯器這個member functions不會改動class object。
Class egclass {
Public:
//這些是const member functions 他們不會改動class object
int length() const;
int ended() const;
//這些是 non-const member functions
int nex();
private:
//…
}
const應該接在member functions的參數列後,如果在class的體外定義的const member functions,那就必須同時在宣告和定義中都指定const。
關鍵字mutable可以讓一個data member 具有這樣一個性質:當它的值被改動後,並不會破壞class object的常數性。
4. this指標
看一下這個例子;
Stack & Stack::
traner(const stack &rhs)
{
_ip=rhs_ip;
_size=rhs._size;
return ??? //這是我們應該返回各什麼值哪?
}
this指標就是解決這個問題的。This指標在member functions中用來定址其呼叫者的,這時返回值可以這樣寫了 return *this;
整個member functions就可以這樣改寫啦
Stack & Stack::
transfer(const stack &rhs)
{
if (this !=&rhs){
_ip=rhs_ip;
_size=rhs._size;
}
return *.this;
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-991877/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 初學者請看! (2千字)
- 初學者看過來:簡單談談 C/C++ 遞迴的思想,實現,以及和迴圈的關係。 (轉)C++遞迴
- 質管工作中的“六種浪費”(轉載)
- 管理工作中的“七種浪費”(轉)
- 淺談天涯收費問題薦
- 淺談疫情對消費金融的影響
- 淺談“用力不用腦“
- 初學者 (轉)
- 給初學者看的 shuf 命令教程
- 估算實踐是浪費嗎?
- 敏捷的核心:消除浪費,走向精益敏捷
- c++初學者的50個忠告C++
- 初學者請進,看far.exe的註冊碼! (7千字)
- 淺談 class 私有變數變數
- 淺談class私有變數變數
- 付費迴圈——談談《放置奇兵》的付費模式模式
- 改掉 6 種浪費生命的工作狀態
- 你是否浪費了你手中的資料?
- 給C++初學者的50個忠告C++
- 初學Hibernate,請教高手
- 淺談前端與網路請求前端
- RMAN初學者指南(轉)
- 不要浪費時間寫完美程式碼
- 揭秘敏捷精髓:消除浪費 走向精益敏捷
- 程式設計師浪費生命的幾種方式程式設計師
- "堆"和"棧"的基本概念(C/C++初學者必讀) (轉)C++
- for new-newbies(脫殼+patch),學破解不足三天者請進,高手如果不怕浪費時間,也請指點一下。 (8千字)
- 初學者請教Jivejon3的問題
- 淺談如何增強遊戲付費規劃的吸引力遊戲
- JSP初學者看的好文章[推薦]JS
- 報告:明智地處理廣告浪費
- 不要浪費時間寫完美的程式碼
- 網際網路每年消耗30座核電站 90%電量被浪費
- 省出美好生活:“後浪”網路消費及出行生活洞察
- 模板初學者指南1 (轉)
- 模板初學者指南2 (轉)
- HTML初學者指南(九)(轉)HTML
- HTML初學者指南(七)(轉)HTML