模板问题 请教 有点搞不懂了!

xengine-qyt 2010-08-06 09:16:39

#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;
}


看上面的代码,请帮忙解释下 two[i][j] 这个是如何得到 1的 第一次循环的时候。帮忙吧流程说清楚,谢谢 不太明白 我新手!!
...全文
122 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
alang512 2010-08-07
  • 打赏
  • 举报
回复
只有一个主函数的啊 ,我明白了 楼主是想定义 两个类对象。
Qlaiaqu 2010-08-07
  • 打赏
  • 举报
回复

#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;
}


xengine-qyt 2010-08-07
  • 打赏
  • 举报
回复
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;
}
这个是多余的 !
weixiaoshashou 2010-08-06
  • 打赏
  • 举报
回复
怎么又两个main()函数

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧