0

元。パラメータを持たず、グローバル構造体を使用するピクセル データ (赤、緑、青) を変更する関数がありますglobglob.data赤、緑、青のピクセルを読み取るためにアクセスします。

であるパラメーターを含めるとglob*、ポインターからデータにアクセスできた場合の違いは何ですか。

これは、任意の関数からグローバルを使用するよりも良い方法ですか?

この実装は、「glob.width = 2」などを呼び出すよりも優れています。

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

2 に答える 2

3

「これは、任意の関数からグローバルを使用するよりも良い方法ですか?」

パラメータを関数に渡す代わりにグローバル変数を使用することは、間違いなく良い方法ではありません。

ピクセルを処理 (変更) する関数を作成する場合は、ピクセルを処理する関数を定義します。

void processPixel(Pixel& p) {
    ...
}
于 2013-10-09T18:26:11.660 に答える
0

データと機能をオブジェクトにカプセル化することは、オブジェクト指向設計の基本です。したがって、関数に値を渡すためにグローバルを使用することは、「良い」OOD プラクティスではなく、コード コンポーネントのモジュール性に悪影響を与えるため、C などの構造言語で非 OOD 設計であっても、一般的には良いプラクティスではありません。コード内に「隠れた」依存関係を作成します。ある種の「グローバル」な機能が絶対に必要な場合は、クラスで静的メンバーを宣言して、メンバーを一意にしながら、1 つのコンポーネント (クラス) にカプセル化したままにすることができます。

于 2013-10-09T19:20:56.447 に答える