0

printf()次のようにさまざまな数の引数で使用する場合

printf("Hello");

printf("%d",a);

printf("%d%d",b,c);

これが「オーバーロード」と呼ばれないのはなぜですか(異なるタスク実行で同じ方法を使用)? オーバーロードしている場合、C がオブジェクト指向プログラミング言語と見なされないのはなぜですか?

4

4 に答える 4

8

これは可変個引数関数と呼ばれ、オーバーロードではありません。オーバーロードは、オブジェクト指向とは何の関係もありません。

于 2012-08-26T15:05:56.017 に答える
3

これが「オーバーロード」と呼ばれないのはなぜですか

同じ関数を使用しているため:

int printf(const char *restrict format, ...);

オーバーロードの前提条件の1つは、同じ名前の異なる関数/メソッドを持つことです。ここでは、varargs機能のおかげで非常に用途が広いものの、1つの関数しかありません。

于 2012-08-26T15:05:53.587 に答える
2

メソッドのオーバーロードではありません。printf2番目の引数としてオプションvargs、つまり可変引数リストを受け取ることが起こります。

int printf(const char * format、...);

フォーマットされたデータをstdoutに出力するformat引数が指定するようにフォーマットされたデータのシーケンスを標準出力(stdout)に書き込みます。formatパラメーターの後に、関数は少なくともformatで指定された数の追加の引数を予期します。

于 2012-08-26T15:05:43.073 に答える
0

オブジェクト指向プログラミングは、カプセル化、メッセージ パッシング、継承、ポリモーフィズムを含むパラダイムを指します。つまり、オブジェクト指向は、オーバーライドされた関数で を定義することを意味classします。これは、パラメーターの型に基づいて関数内で異なるアクションを実行するオーバーロードとは異なります。virtual

オーバーロードオーバーライドもしてprintf()いません。これは可変長の引数リストです。

于 2012-08-26T15:13:28.807 に答える