template<class T>
class Node
{
public:
Node(Node<T>* next=NULL, T data=T()) : _next(next), _data(data)
{
}
Node<T>* _next;
T _data;
};
Run Code Online (Sandbox Code Playgroud)
我是c ++模板的新手.对于默认参数,是T data = T()标准方法吗?也许还T data = 0可以吗?
这不是"构造函数初始化",这是一个默认参数.它允许调用者提供比函数少的参数,未指定的参数将采用默认值.
另一种方法是:
template<class T>
class Node
{
public:
Node(Node<T>* next, T data) : m_next(next), m_data(data) {}
Node(Node<T>* next) : m_next(next), m_data() {}
Node(void) : m_next(NULL), m_data() {}
Node<T>* m_next;
T m_data;
};
Run Code Online (Sandbox Code Playgroud)
如果允许使用少于两个参数,则调用不同的构造函数(具有几乎相同的行为).
使用单独的重载有许多优点:
data始终省略参数,则不需要复制构造函数.data始终提供参数,则不需要默认构造函数.| 归档时间: |
|
| 查看次数: |
2786 次 |
| 最近记录: |