C関数とJavaメソッドの違いの1つは、オブジェクトがCで明示的に渡され、Javaで暗黙的に渡されることです。誰でも、暗黙的および明示的にplsを渡す例を提供できますか?
2 に答える
これが何を意味するのかはわかりませんが、Cでオブジェクト指向スタイルがどのように実現されるかを探しているのかもしれません。
Javaは真のオブジェクト指向言語です。これは、クラスとオブジェクトがあることを意味します。呼び出されたオブジェクトにアクセスする必要があるメソッドを作成する場合this
、問題のオブジェクトを参照するキーワードを使用できます。
int getSomething()
{
return this._something;
}
したがって、キーワードの実際の値はthis
オブジェクトに依存します。これは、パラメーターの暗黙の引数と見なされます。
ただし、Cには、実際のクラスもオブジェクトもありません。OOスタイルのコードを実現したい場合は、Javaに対応する引数this
(つまり、「メソッド」を呼び出している「オブジェクト」)を関数に明示的に渡す必要があります。たとえば、cURLネットワークライブラリでは次のようになります。
CURL *hndl = curl_easy_init();
curl_easy_setopt(hndl, CURLOPT_URL, "http://example.com");
curl_easy_perform(hndl);
次のようないくつかのOOコードとほぼ同等です。
CURL hndl = new CURL;
hndl->setopt(CURLOPT_URL, "http://example.com");
hndl->perform();
Cでは、このスタイルでコードを記述する場合、「オブジェクト」は「コンテキスト」または「ハンドル」と呼ばれることが多いことに注意してください。
少なくともJavaでは、参照によって渡される場合、渡される参照、つまりCで呼び出されることを思い出すポインターは、元のポインター自体ではなく、元のポインターのコピーです。
したがって、オブジェクトに関する情報を含むメモリ領域があります。次に、そのメモリ領域へのポインタがあります。Javaが参照を渡すとき、最初にそのポインタをメモリ領域にコピーし、次にそのポインタのコピーをパラメータとして渡します。
これはすべて、参照による他のパスおよび値によるパスの区別から完全に分離されています。