2015-01-09 2 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 헤더 파일을 사용해야합니다. 내 지식에, 개체는 템플릿 매개 변수입니다. 누군가 ListNode 생성자의 Object 뒤에 괄호가있는 이유를 설명해 주실 수 있습니까?C++의 템플릿 매개 변수

고마워요!

+0

ListNode 생성자는 기본 생성자입니다. 즉, ListNode :: ListNode()처럼 작동합니다. 따라서 클래스의 모든 멤버를 초기화합니다 : 여러분의 경우'next'는 nullptr에,'element'는 디폴트 값으로, 디폴트 생성자의 값인 Object :: Object()입니다. – user1738687

답변

3

기본적으로 템플릿 매개 변수로 제공된 Object 클래스의 기본 생성자에 대한 호출입니다. 이 기본 생성 객체는 ListNode 생성자의 첫 번째 매개 변수에 대한 기본 인수 값으로 사용됩니다.

그건 사실 거짓말이지만 이해하기 쉽고 대부분의 경우를 다루므로 맨 위에 올려 놓습니다. 실제로는 Object 유형의 객체 인 value initialization입니다. Object이 사용자 정의 생성자가있는 클래스 인 경우 값 초기화는 기본 생성자에 대한 호출입니다. Object이 사용자 정의 생성자가없는 클래스 인 경우 값 초기화는 모든 멤버의 값 초기화로 (재귀 적으로) 정의됩니다. 마지막으로, 프리미티브 (int, double, pointers, etc ...)의 경우 값 초기화는 0으로 초기화됩니다.

0

매개 변수없이 ListNode 개체를 생성하면 theElement 매개 변수가 Object 기본 생성자를 사용하여 자동으로 만들어집니다.

관련 문제