64,648
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
using namespace std;
template<class T,int n>
class people
{
public:
people();
people(const T&t);
T &operator[](int i);
void Show();
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;
}
}
template<class T,int n>
T &people<T,n>::operator[](int i)
{
cout<<"执行下标运算符函数 opeartor[]\n";
if (i < 0||i >= n)
{
cerr<<"超出数组限制,第:"<<i<<"个元素溢出\n";
exit(EXIT_FAILURE);
}
return a[i];
}
template<class T,int n>
void people<T,n>::Show()
{
for (int i = 0;i < n;i++)
{
cout<<"a["<<i<<"]:"<<a[i]<<"\t";
}
cout<<endl;
}
int main()
{
people<double,4>one;
one.Show();
people<double,4> *p = new people<double,4>[4];
for (int i = 0;i < 9;i++)
{
p[i] = one[i];//这里将会调用到T &people<T,n>::operator[](int i)
p[i].Show();
}
return 0;
}
int main()
{
people<people<int,2>,3>two;
int obj = 1;
for (int i = 0;i < 4;i++)
{
int sum = 1;
for (int j = 0;j < 2; j++)
{
cout<<"\ntwo["<<i<<"]["<<j<<"]:"<<two[i][j]<<"\n";
cout<<"第"<<sum++<<"个元素输出完毕\n\n";
}
cout<<"第"<<obj++<<"个对象中的数组元素输出完毕\n\n";
}
return 0;
}
#include <iostream>
using namespace std;
template<class T,int n>
class people
{
public:
people();
people(const T&t);
T &operator[](int i);
void Show();
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);//2.调用拷贝构造函数
}
}
template<class T,int n>
people<T,n>::people(const T&t)
{
cout<<"执行带一个参数的构造函数\n";
for (int i = 0;i < n;i++)//3.赋值,对象类似于二维数组,分别是{1,1},{2,2},{3,3}
{
a[i] = t;
}
}
template<class T,int n>
T &people<T,n>::operator[](int i)
{
cout<<"执行下标运算符函数 opeartor[]\n";
if (i < 0||i >= n)
{
cerr<<"超出数组限制,第:"<<i<<"个元素溢出\n";
exit(EXIT_FAILURE);
}
return a[i];//5.返回two[0],一个people<int,2>,再次进入此模板(生成的函数实例不一样),返回two[0][0]
}
template<class T,int n>
void people<T,n>::Show()
{
for (int i = 0;i < n;i++)
{
cout<<"a["<<i<<"]:"<<a[i]<<"\t";
}
cout<<endl;
}
int main()
{
people<people<int,2>,3>two; //1.调用初始化函数
int obj = 1;
for (int i = 0;i < 4;i++)
{
int sum = 1;
for (int j = 0;j < 2; j++)
{
cout<<"\ntwo["<<i<<"]["<<j<<"]:"<<two[i][j]<<"\n"; //4.two[0][0],调用people<int,2> &people<people<int,2>,3>::operator[](int i),再调用int &people<int,2>::operator[](int i)
cout<<"第"<<sum++<<"个元素输出完毕\n\n";
}
cout<<"第"<<obj++<<"个对象中的数组元素输出完毕\n\n";
}
return 0;
}