如題,書中是用類模板來實作的二維陣列,允許實作的結果是這樣的
,第一行應該是1 2 3 4 5 ,輸出的這東西是什么呀,請大神幫忙看下,新手小白在線等
#ifndef _ARRAYTP_H_
#define _ARRAYTP_H_
#include<iostream>
#include<cstdlib>
template<class T,int n>
class ArrayTP
{
public:
ArrayTP() {}
explicit ArrayTP(const T &v);
virtual T & operator[ ](int i);
virtual T operator[ ](int i)const;
friend std::ostream & operator<<(std::ostream &os, ArrayTP &tp);
private:
T ar[n];
};
template<class T,int n>
ArrayTP<T, n>::ArrayTP(const T &v) {
for (int i = 0;i < n;i++)
ar[i] = v;
}
template<class T, int n>
T & ArrayTP<T, n>::operator[ ](int i) {
if(i<0||i>=n)
{
std::cerr << "Error in array limits: " << i << " is out of range\n";
std::exit(EXIT_FAILURE);
}
return ar[i];
}
template<class T, int n>
T ArrayTP<T, n>::operator[ ](int i)const {
if (i < 0 || i >= n)
{
std::cerr << "Error in array limits: " << i << " is out of range\n";
std::exit(EXIT_FAILURE);
}
return ar[i];
}
template<class T, int n>
std::ostream & operator<<(std::ostream &os, ArrayTP<T, n> &tp) {
os << tp.ar;
return os;
}
#endif // !_ARRAYTP_H_
#include <iostream>
#include"arraytp.h"
int main()
{
using std::cout;
using std::endl;
ArrayTP<int, 10> sums;
ArrayTP<double, 10> aves;
ArrayTP<ArrayTP<int, 5>, 10> twodee;
int i, j;
for (i = 0;i < 10;i++) {
sums[i] = 0;
for (j= 0; j<5; j++)
{
twodee[i][j] = (i + 1)*(j + 1);
sums[i] += twodee[i][j];
}
aves[i] = (double)sums[i] / 10;
}
for ( i = 0; i <10; i++)
{
for (j = 0;j < 5;j++)
{
cout.width(4);
cout <<twodee[i][j] << ' ';
}
cout << " : sum= ";
cout.width(3);
cout << sums[i] << ", average=" << aves[i] << endl;
}
cout << "Done.\n";
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/232220.html
標籤:C++ 語言
下一篇:這道C語言不太懂
