求助C++类模板实例化的问题 急 谢谢。!

2024-12-01 08:24:32
推荐回答(2个)
回答1:

#include
using namespace std;
template
class max
{
private:
T** num;
int r,l;
public:
max()
{
printf("输入矩阵的行数及列数: ");
scanf("%d %d",&r,&l);
printf("依次输入矩阵的元素:\n");
num=(T**)malloc(sizeof(T*)*r);
for(int i=0;i {
num[i]=(T*)malloc(sizeof(T)*l);
for(int j=0;j {
cin>>num[i][j];
}
}
}

friend void print(max a)
{
printf("矩阵共%d行%d列:\n",a.r,a.l);
for(int i=0;i {
for(int j=0;j {
cout< }
printf("\n");
}
}
};

int main()
{
max mi;
print(mi);
return 0;
}

如上就可以了。
错误主要是输入的格式问题。
scanf("%d",&num[i][j]);
这种是只可以输入整数的。
改成
cin>>num[i][j];
如有问题可以空间留言,或hi留言。

回答2:

楼主如果要坚持 scanf()
可使用模板的中级技术:指定特化模板类的成员函数

具体代码如下:

template
class max
{
private:
T** num;
int r,l;
public:
max()
{
printf("输入矩阵的行数及列数: ");
scanf("%d %d",&r,&l);
printf("依次输入矩阵的元素:\n");

num=(T**)malloc(sizeof(T*)*r);

for(int i=0;i {
num[i]=(T*)malloc(sizeof(T)*l);
for(int j=0;j {
ReadData(i, j);
}
}
}

friend void print(max a)
{
printf("矩阵共%d行%d列:\n",a.r,a.l);
for(int i=0;i {
for(int j=0;j {
cout< }
printf("\n");
}
}

// 这个重要,对不同类型数据输入,用不同的办法!
void ReadData(int i, int j)
{
// 这里,用模板高级语法来特化
}
};

// 特化整型数据输入
template <>
void max::ReadData(int i, int j)
{
scanf("%d",&num[i][j]);
}

// 特化浮点型数据输入
template <>
void max::ReadData(int i, int j)
{
scanf("%f",&num[i][j]);
}

int main()
{
max intData;
print(intData);

max floatData;
print(floatData);
return 0;
}