小糖出品 對方法的補充(1)

2021-07-02 22:52:54 字數 1556 閱讀 9489

上篇部落格,小糖說到了方法的定義和實現。這篇部落格小糖對上篇的內容進行一些補充。

上篇部落格說到了定義方法時,傳入的引數個數,上篇說到了傳入乙個引數和兩個引數時的宣告格式,現在小糖來說說另一種情況,傳入多個引數的情況。

假設你有這種需求,在寫乙個方法的時候需要向方法中傳入許多引數,而且是至少乙個以上的任意個數,那麼我們該怎麼辦呢?小糖來說說自己對定義這種方法的理解。首先,小糖先來說說方法宣告部分,宣告部分跟之前的有些許區別。比如我們要寫乙個test方法,那麼宣告部分的格式如下:

- (void) test:(nsstring *) name,...;

在test方法中,我們宣告了乙個nsstring *的形參,這個形參除了可以傳name之外,還可以傳其他引數,需要說明的是,要定義可傳多個形參的方法,需要在定義方法的同時,在最後乙個形參名後增加逗號和三點(,...),這樣說明了該形參可以接受多個引數值。需要注意的是,這樣定義出方法只能傳入多個相同型別的引數,無法傳入引數型別不同的引數,所以在用的時候需要注意下。

在進行方法實現之前,小糖需要說明幾個關鍵字的作用,只有使用這幾個關鍵字,才能實現該方法。首先來講第乙個關鍵字:

va_list,這東西是什麼呢?這個東西其實是乙個型別,就好比如nsstring 、int 、float一樣,它是用來定義指向可變引數列表的指標變數,什麼意思呢?就是定義了乙個指標,這個指標指向了你在test:後面傳入的形參的列表,其實就是將所有傳入的形參弄成乙個列表,然後讓該指標指過去的意思。

接下來是第二個關鍵字:va_start,這又是什麼東西呢?這個東西跟第乙個va_list就不一樣了,其實我們可以從名字看出來的,就像第乙個中的list一樣,start其實就是表示開始的意思,va_start其實是乙個函式,這個函式指定乙個需要處理的可變形參的列表,並且讓指標變數指向可變形參列表的第乙個引數。

接下來說的是va_end,顧名思義,就是結束的函式,結束處理可變形參,釋放指標。

最後乙個關鍵字是va_arg,這個也是乙個函式,它的作用就是返回獲取指標當前指向的引數的值,並將指標移動到下乙個引數。

說了這麼多,我們還是得用例子來理解。比如說,我想在某個類中定義乙個可變引數的方法,該怎麼宣告呢?

像上面一段**一樣,我們宣告了乙個test方法,而且該方法是形參個數可變的方法。該方法的實現部分如下:

利用上面介紹的幾個關鍵字來實現該方法,接下來就可以在main中建立物件呼叫該方法了,如下

執行結果如下

這樣我們就可以實現傳入多個引數了。

其實,小糖覺得,整個過程主要是那幾個關鍵字的使用不怎麼好理解,其他嘛,都是很好理解的。具體感受,那得看個人咯。



小糖出品 方法的定義與實現

什麼是方法呢?下面是小糖從某書上看到的關於方法的解釋 方法是類或物件的行為特徵的抽象,也是類或物件最重要的組成部分。啥意思呢?小糖按自己的想法解釋一下,我們舉個例子,比如說現在有乙隻貓,那麼我們可以把這只貓看成乙個物件,貓它會幹嘛呢?它會跑吧,也會跳吧,跑和跳其實就可以說是貓這個物件的方法,由貓這個...

對方法的驗證

1 把基準資料提出 import pandas as pd dframe1 pd.read excel window regulator分析報告分析.xlsx sheetname sheet1 dframe2 pd.read excel window regulator分析報告分析.xlsx she...

Re模組的方法補充

id str input 輸入乙個身份證號 import reobj re.compile r 1 9 d 0 9x 1 9 d 將正規表示式編譯成為乙個 正規表示式物件 ret obj.match id str ifret print 輸入的身份證合法 ret.group else print 輸...