【问题标题】:Template Parameter in C++C++ 中的模板参数
【发布时间】:2015-03-07 09:48:20
【问题描述】:
  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 是一个模板参数。有人可以解释一下为什么 ListNode 构造函数中的 Object 后面有括号吗?

谢谢!

【问题讨论】:

  • 你的 ListNode 构造函数是默认构造函数,也就是说,它的行为类似于ListNode::ListNode()。因此它默认初始化其类的所有成员:在您的情况下,next 为 nullptr,element 为其默认值,即其默认构造函数的值,即Object::Object()

标签: c++ class templates parameters constructor


【解决方案1】:

本质上,它是对作为模板参数提供的Object 类的默认构造函数的调用。此默认构造对象用作ListNode 构造函数的第一个参数的默认参数值。

这其实是个谎言,但它很容易理解并且涵盖了大多数情况,所以我把它放在最上面。实际上,它是Object 类型的对象的value initialization。在Object 是具有用户定义构造函数的类的情况下,值初始化是对默认构造函数的调用。在Object 是没有用户定义构造函数的类的情况下,值初始化(递归地)定义为所有成员的值初始化。最后,对于原语(int、double、指针等),值初始化是初始化为零。

【讨论】:

    【解决方案2】:

    这意味着,如果您创建没有参数参数的ListNode 对象,将使用Object 类型的默认构造函数自动创建theElement 参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多