【筆記】C++ 類與對象

來源:互聯網
上載者:User

  類是現實世界中客觀事物的抽象,即將具有相似靜態屬性和動態行為的對象集合歸納為一個類。類和對象是物件導向技術的核心。

1.1 類的聲明與定義

類的聲明形式:

1 class<自訂類類型名>
2 {
3 [public:]
4 [<共有成員說明表>]
5 [private:]
6 [<私人成員說明表>]
7 };

類的定義

成員函數的定義形式如下:

1 <函數類型><類名>::<函數名>(<形參數表>)
2 {
3 函數體
4 }

成員函數還可以再類中定義。

1.2 對象

對象的聲明

  聲明對象的過程叫做類的執行個體化。先定義類類型,然後聲明類對象的一般形式為:  類名  對象名表;

類成員的訪問

  在類體外,類成員的訪問形式為:

  <對象名>.成員名     或者     <指向對象的指標名>->成員名 

如:

1 Date date1,date2;
2 Date *pDate = &date2;
3
4 date1.SetDate(...);    //方式1
5 pDate ->SetDate(...);    //方式2

類成員的存取控制

  C++通過三個關鍵字public(公有)、private(私人)、protectd(保護)、來指定類成員的訪問限制。

◆公有成員:在程式的任何地方都可以訪問。一般限制在成員函數上,使其作為類與外界的介面,通過國它來操作類的對象。

◆私人成員:只能被該類的成員函數或該類的友元訪問。

◆保護成員:只能在該類的內部或其衍生類別類題中使用。

  類與結構體的區別:類預設的存取控制類型是private,而結構體預設的存取控制類型是public。

1.3 建構函式和解構函式

1.3.1 建構函式

  在C++中,對象的初始化工作是由建構函式來完成的。建構函式是一種特殊的成員函數。

建構函式的特徵:

  ①建構函式名與類名相同。

  ②無任何函數傳回型別說明。

  ③一個新的對象被建立時,建構函式被編譯系統自動調用,完成初始化工作。

  ④如果在類中沒有給出建構函式,系統給出一個預設的無參建構函式。

  ⑤建構函式可以重載。

1.3.2 解構函式

  在建構函式中使用new分配了記憶體空間,當登出對象時,需要使用delete將動態分配的空間釋放。這部分工作可以放在解構函式中。

  解構函式是一個特殊的公有成員函數,特點如下:

  ①解構函式名為:  ~<類名>。

  ②無任何函數傳回型別說明。

  ③解構函式無參數,所以不能被重載。

  ④如果在類中沒有給出解構函式,系統給出一個預設的解構函式。

  ⑤當用delete釋放動態對象時,系統自動調用解構函式完成對象撤銷前的處理。

1.4 類的靜態成員 

  在類的成員前加關鍵字static,這種成員就是類的靜態成員。類的靜態成員的特點是:靜態成員屬於類,不屬於任何對象。靜態成員只有一份存於公有記憶體中,被該類的所有對象共用。

1.4.1 待用資料成員 

  需要在類外對待用資料成員進行定義。定義如下:    <類型><類名>::<待用資料成員名>[=<初值>];

如:    double  Account::m_rate=0.098;  

註:待用資料成員定義時前不要加關鍵字static。且只能定義一次。

  類的待用資料成員不屬於任何類,類的公有待用資料成員的一般訪問形式為:

  <類名>::<待用資料成員名>   或者   <對象名>.<待用資料成員名>   或者  <對象指標>-><待用資料成員名>

  如果待用資料成員是私人的,就只能使用靜態成員函數來間接訪問待用資料成員。

1.4.2 待用資料成員

  對類的靜態成員函數的調用形式為:   <類名>::<靜態成員函數調用>

1.5 友元

  在程式中,如果普通函數或另一個類中的函數需要經常通過類聽過的公有介面來訪問類的私人成員或保護成員,為了提高程式啟動並執行效率,可以將它們聲明為類的友元,它們就能直接存取類的任何成員啦。友元提供了一般函數與類的成員之間、不同類的成員之間進行資料共用的機制。

  用friend關鍵字可以聲明3類友元:

(1)友元函數

  將一個普通函式宣告為類的友元函數的形式為:  friend<資料類型><友元函數名>(參數表)

例如:fun函式宣告為A類的友元函數,聲明後,fun函數有權訪問A類中的任何成員,包括私人成員和保護成員。

1 class A
2 {
3 ...
4 friend int fun(int x);
5 ...
6 }

(2)友元成員

  將一個類的成員函式宣告為另一個類的友元函數,就是友元成員。聲明友元成員的形式為:   friend <類型><含有友元成員的類名>::<友元成員名>(參數表);

例如:A類中的成員函數有權訪問B類中的任何成員,包括私人成員和保護成員。

 1 class A
2 {
3 ...
4 int fun(int x);
5 ...
6 }
7  class B
8 {
9 ...
10 friend int A::fun(int x);
11 ...
12 }

(3)友元類

  將一個類聲明為另一個類的友元類的文法形式為:   friend<友類名>;   或者     friend class <友類名>;

例如:A類的任何成員函數都有權訪問B類中的任何成員,包括私人成員和保護成員。

1 class B
2 {
3 ...
4 friend class A
5 ...
6 }

1.6 this指標

  每個類成員函數都含有一個指向被調用對象的指標,這就是this指標。this指標是一個隱含於每一個非靜態成員函數中的特殊指標,就是成員函數的一個類指標類型的形參。

  由於有了this指標的存在,使得類中相同的成員函數會根據this指標指向對象的不同而操作不同對象的資料成員。

  類的靜態成員函數沒有this指標。這是因為靜態成員函數為類的所有對象所共有,不屬於某一個對象。

顯式使用this指標的兩種情況:

(1)在類的非靜態成員函數中返回類對象本身的時候,直接使用“return *this”。

(2)當參數和成員變數名相同時。

1.7 string類

  C++標準程式庫中提供了一個string類,專門用來處理字串操作。使用string類,必須在程式中包含標頭檔string(不是string.h,它是C字串標頭檔)。

1.7.1 string類對象的初始化

  string類的建構函式包括:

View Code

1 string();
2  string(const char *s);將string初始為一個由s指向的字串,以'\0'作為結束標識符
3  string(size_type n,char c);n個元素,每個元素都是c
4  string(const sring &str,size_type n=npos);
5  string(const char *s,size_type n);...

1.7.2 string類操作

View Code

 1 =,assign();
2 swap();
3  +=,append(),push_back();
4 insert();
5 erase();
6 clear();
7 replace();
8  +;
9  ==,!=,<,<=,>,>=,compare();
10 size(),length();
11 max_size();
12 empty();
13 capacity();
14 reserve();
15 [ ],at();
16  >>,getline();讀出
17  <<;寫入
18 copy();
19 c_str();
20 data();
21 substr();
22 find();

今天指標的學習就到這裡了。

   

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.