我的代码是
template <class T1, class T2>
class MyClass
{
T1 first;
T2 second;
public:
//default constructor
MyClass():first(T1()), second(T2()) {}
}
我想要一个可以接受 0、1 或 2 个参数(默认参数)的构造函数。这里 T1 和 T2 既可以是原始类型,也可以是非原始类型。
我的代码是
template <class T1, class T2>
class MyClass
{
T1 first;
T2 second;
public:
//default constructor
MyClass():first(T1()), second(T2()) {}
}
我想要一个可以接受 0、1 或 2 个参数(默认参数)的构造函数。这里 T1 和 T2 既可以是原始类型,也可以是非原始类型。
用这个构造函数替换你现有的构造函数:
MyClass(const T1& t1 = T1(), const T2& t2 = T2()):first(t1), second(t2) {}
尝试这个:
template <class T1, class T2>
class MyClass
{
T1 first;
T2 second;
public:
//default constructor
MyClass(T1 fst=T1(), T2 sec = T2()):first(fst), second(sec) {}
};
int main()
{
MyClass<int,int> c;
MyClass<int,int> d(5);
MyClass<int,int> e(5,10);
}
您只需在定义中分配默认值。您必须注意默认参数始终是参数列表中的最后一个。在所有 0、1 或 2 个参数的情况下,只需要一个构造函数。
与所有其他函数一样,默认参数可以在构造函数初始化列表中使用。
MyClass(T1 t1 = T1(), T2 t2 = T2()) : first(t1), second(t2) {}