读书人

对象数组模板,该怎么处理

发布时间: 2012-08-26 16:48:05 作者: rapoo

对象数组模板
class people
{
public:
people();
people(const T&t);
private:
T a[n];
};
template<class T,int n>
people<T,n>::people()
{
cout<<"执行构造函数\n";
for (int i=0;i<n;i++)
{
a[i]=(i+1);
}
}
template<class T,int n>
people<T,n>::people(const T&t)
{
cout<<"执行带一个参数的构造函数\n";
for (int i=0;i<n;i++)
{
a[i]=t;
}
}

void main()
{
people<people<int,2>,3>two;
}

这个程序会调用4次不带参数的构造函数,再调用3次带一个参数的构造函数,这是为什么啊

[解决办法]
3次 people<int,2>的构造,一次people<peole<int,2>,3>的构造 不就是4次了
[解决办法]
首先它会执行带参数的构造,里面做了3次a[i] = t;
people<people<int,2>,3>two 这个two也是people的默认构造
你可以在默认构造里面加一行代码
cout<<typeid(T).name();
就知道是哪4次了

[解决办法]
首先main函数里定义一个变量two时,便首次调用无参构造函数。
然后在无参构造函数里面a[i]=(i+1);编译器便将i+1作为参数对a[i]进行初始化,此时的初始化过程
便调用有参构造函数,由于你的参数n为3,所以加上第一次的调用,对无参构造函数的调用有4次,而
对有参构造函数的调用便只有3次了

读书人网 >C++

热点推荐