11

データ構造 (リスト、スタック、キュー) を勉強していますが、コードのこの部分が混乱しています。

ListNode( const Object& theElement = Object(), ListNode * node = NULL);


template<class Object>
ListNode<Object>::ListNode( const Object& theElement, ListNode<Object> * node) {
    element = theElement;
    next = node;
}
  1. 関数パラメーター内に代入演算子があるのはなぜですか?
  2. call は何をしObject()ますか?
4

3 に答える 3

19

これらは代入演算子ではありません。これらは関数のデフォルトの引数です。

関数は 1 つ以上のデフォルト引数を持つことができます。つまり、呼び出しポイントで引数が指定されていない場合は、デフォルトが使用されます。

void foo(int x = 10) { std::cout << x << std::endl; }

int main()
{
  foo(5); // will print 5
  foo(); // will print 10, because no argument was provided
}

投稿したコード例では、ListNodeコンストラクターにはデフォルト引数を持つ 2 つのパラメーターがあります。最初のデフォルト引数は ですObject()。これは単に のデフォルト コンストラクタを呼び出しますObject。これは、インスタンスがコンストラクターにObject渡されない場合、デフォルトのが使用されることを意味します。これは、単に default-constructed を意味します。ListNodeObject()Object

参照:デフォルトの
関数パラメータを使用する利点 関数パラメータ
のデフォルト値

于 2012-04-11T10:47:05.800 に答える
3

宣言での代入は、オプションのパラメータのデフォルト値を提供します。のデフォルトコンストラクタObject()への呼び出しを意味します。Object

デフォルト パラメーターの効果は次のとおりです。0ListNode個、1 個、または 2 個のパラメーターを使用してコンストラクターを呼び出すことができます。2 つのパラメーター式を指定すると、それらは通常どおり渡されます。式を 1 つだけ指定すると、その値が最初のパラメーターとして渡され、2 番目のパラメーターはデフォルトで に設定されNULLます。パラメータを渡さない場合、最初のパラメータはObjectデフォルトのコンストラクタで作成された のインスタンスにデフォルト設定され、2 番目のパラメータはデフォルトで に設定されNULLます。

于 2012-04-11T10:48:45.207 に答える
0

C プログラミング言語の演算子と式については、 http://www.errorless-c.in/2013/10/operators-and-expressions.htmlを参照してください。

于 2014-02-23T08:29:13.543 に答える