2013-10-09 69 views
0

Ex。 我有一個函數可以改變沒有參數並使用全局結構的像素數據(紅色,綠色,藍色),glob。我將訪問glob.data以讀取紅色,綠色和藍色像素。使用全局結構vs調用方法(該結構的指針)

有什麼區別是,如果我要包含一個參數將是一個glob*,我可以訪問指針中的數據。

這是更好的做法,然後使用全球任何功能?

此實現會比打電話更好「glob.width = 2」等

RevolverFilter(&global, &temp); 
void RevolverFilter(glob* org,glob* temp1){ 
for x: for y: tRed = org->data[x+y*w].r; 
    ... 
} 
+2

如果您使用C++,將圖像封裝到類中並使用成員函數更改像素數據是最佳實踐。 – jodag

回答

3

「這是更好的做法,然後使用全球任何作用?」

使用全局變量作爲將參數傳遞給函數的替代方法絕對不是一種好的做法。

如果你想創建一個將處理(修改)的功能像素,然後定義處理像素

void processPixel(Pixel& p) { 
    ... 
} 
0

封裝的數據和功能爲對象是面向對象設計的基礎功能。因此,使用全局的方法將值傳遞給函數並不是一種「良好的」OOD實踐,即使對於非OOD設計,在結構化語言(如C)中也不是一個好的實踐,因爲這對代碼組件的模塊化是有害的,並在代碼中創建「隱藏」依賴關係。如果你絕對需要某種類似「全局」的功能,你可以在一個類中聲明一個靜態成員,使該成員具有唯一性,並將其封裝在一個組件(一個類)中。