c 入門之類 進一步剖析

2022-05-02 16:30:09 字數 2127 閱讀 9587

通常的,關於乙個類,包含了下面幾個方面:

1  宣告類成員和介面;2 定義類介面函式(方法)3通過介面呼叫類

下面先給出第一條:宣告類成員和介面

1

# ifndef mytime0_h_

2# define mytime0_h_34

class

time5;

19 # endif

關於該類宣告:

1  主要到類成員放在private中,類介面放在public中(private中的成員不允許通過外部對其訪問)。很多時候,採用這樣的方式使得邏輯更清晰

2  public宣告中,有time()函式,函式名time和類名相同,說明這是建構函式,用於完成類初始化定義(在建立類物件之前,會首先呼叫建構函式初始化物件,然後才能生成物件)

3  public中,有兩個time()函式,他們均為建構函式,且使用了函式過載的功能(函式名相同,特徵標不同),實際建立物件呼叫時會採取最佳匹配準則。

4  注意第15行**,在類宣告中,就允許產生該類定義的形參(這裡是引用變數t),注意到,這裡的函式的返回型別是time類(建立類的初衷就是讓類變的可以和基本型別一樣操作自如,因此可以認為這裡和int等沒有區別)

疑惑:a  搞清1,2,19行的**究竟起到什麼作用???

b 15,16行的**,const為什麼放在函式名的後面,有什麼作用???

下面先給出第二條:定義類介面函式

1 # include "

iostream

"2 # include "

mytime0.h"3

4time::time()58

9 time::time(int h, int

m)10

1415

void time::addmin(int

m)16

2122

void time::addhr(int

h)23

2627

void time::reset(int h, int

m)28

3233 time time::sum(const time &t)const

3441

42void time::show()const

43

關於該類介面函式定義:

1 注意第二行,要將.h標頭檔案包含進去,雖然這個cpp檔案同樣是標頭檔案

2 注意在定義介面函式的時候,涉及到類作用域的問題,即我們所定義的介面函式,都是類中的函式,因此需要用類作用域限定介面函式,::為作用域運算子。(作用域保證了乙個域內的東西和另乙個域中同名的東西不會衝突)

3 兩個time()建構函式是沒有函式返回型別的

4  注意,函式 返回型別 是寫在 類名 前面的!!!

5  33-39行**,請仔細分析:注意開頭的兩個time,第乙個表示函式的返回型別,第二個限定類作用域,引數採用引用變數可以占用更少的記憶體,因此在使用類這種複雜的資料結構的時候,通常會使用引用變數。

6  39行返回了乙個time型別的資料,要注意return返回的機制:返回結束返回之前,區域性變數和臨時物件會被銷毀,(return 變數)則建立了變數的副本,返回副本值。所以這裡不能返回time&,即time引用。

7  類介面函式中,可以使用類成員變數。

小結:不要返回指向區域性變數或臨時物件的引用。函式執行完畢後,區域性變數會被銷毀,引用將指向不存在的資料。

下面先給出第三條:通過介面呼叫類

1 # include "

iostream

"2 # include"

mytime0.h"3

4int

main()

5

關於該類呼叫:

1  開頭仍然要包含類宣告標頭檔案

2  第8行**宣告planning物件時,建構函式使用第乙個time函式,9,10行宣告時,採用第二個time函式。

3  當我們看到coding.show()這樣的一行**時,想到的應該是:首先,之前通過最優匹配的建構函式,初始化了coding物件的成員(這一步很關鍵),然後,show()方法可在其函式內部呼叫初始化好了的coding成員。

3  注意第25行**:隱式呼叫了conding物件自己的成員,顯示將fixing物件作為引數傳遞進去(承接3的描述)。

進一步使用c

1.簡單程式結構 程式是由函式構成。任何程式都是從main函式開始執行 除個別情況 函式由函式頭和函式體構成。函式頭由函式返回值資料型別,函式名,傳入函式資訊組成。函式體由一系列語句和宣告組成。函式名後的圓括號可識別函式。圓括號裡面可以為空,也可以有引數。變數的宣告內容為,變數資料型別和變數名。函式...

bufferedReader進一步理解

public static void main string args string mystring system.out.println 請輸入明文 bufferedreader buf new bufferedreader new inputstreamreader system.in try...

Looper Handler進一步學習

package com.test.looper import android.os.bundle import android.os.handler import android.os.handlerthread import android.os.looper import android.os....