2015-01-09 3 views
1
template <class Object> 
     class ListNode 
     { 
      ListNode(const Object & theElement = Object(), ListNode * n = NULL) 
       : element(theElement), next(n) { } 

      Object element; 
      ListNode *next; 

      friend class List<Object>; 
      friend class ListItr<Object>; 
     }; 

Привет всем, Я пишу программу для своего класса структур данных, и я должен использовать этот заголовочный файл .h, включенный моим инструктором. Насколько мне известно, Object является параметром шаблона. Может кто-нибудь объяснить, почему в Object в конструкторе ListNode есть круглые скобки?Template Parameter in C++

Thankyou!

+0

Конструктор ListNode является конструктором по умолчанию, то есть он действует как 'ListNode :: ListNode()'. Поэтому он по умолчанию инициализирует всех членов своего класса: в вашем случае 'next' - nullptr, а' element' - по умолчанию, то есть значение его конструктора по умолчанию, который является 'Object :: Object()' – user1738687

ответ

3

По существу, это вызов конструктора по умолчанию класса Object, который был предоставлен в качестве параметра шаблона. Этот построенный по умолчанию объект используется как значение аргумента по умолчанию для первого параметра конструктора ListNode.

Это на самом деле ложь, но ее легко понять и покрыть большинство случаев, поэтому я положил ее наверху. На самом деле это value initialization объекта типа Object. В случае, когда Object является классом с определенными пользователем конструкторами, инициализация значения - это вызов конструктора по умолчанию. В случае, если Object является классом без пользовательских конструкторов, инициализация значения (рекурсивно) определяется как инициализация значений всех членов. И, наконец, в случае примитивов (int, double, указатели и т. Д.) Инициализация значения инициализируется до нуля.

0

Это означает, что если вы создадите объект ListNode без параметров, то параметр theElement будет создан автоматически, используя конструктор по умолчанию Object.