0
1 void out3x3(mat3x3 &A)
2 { int i, j;
3   for (i=0; i<3; i++)
4   {   if (i==1)
5           cout << "A = | ";
6       else
7           cout << "    | ";
8       for (j=0; j<3; j++)
9           cout << A.n[j][i] << " ";
10      cout << "|" << endl;
11   }
12 }

这是我正在编写的用于进行矩阵操作的程序中的一个函数。mat3x3 是一个 3x3 矩阵的结构(存储为 An[3][3]。而不是第 5 行输出中的“A”,我希望它输出我在调用函数。

我只使用 A、B 和 C。我可以写三个不同的函数,但我觉得应该有更好的方法来做到这一点。

如果我说 out3x3(B); 它只会显示 A = | |。

我希望发生这种情况:

出3x3(乙);

B = | |

出3x3(C);

C = | |

谢谢你的帮助。

4

2 回答 2

6

变量的名称在运行时不存在。它们只是编译时构造。您还需要执行一些操作,例如更改函数以获取std::string参数:

void out3x3(mat3x3 &A, std::string name)
{
  // ...
  cout << name << " = | ";
  // ...
}

然后像这样调用它:

out3x3(A, "A");
out3x3(B, "B");

然后,您可以使用宏来使这感觉就像您没有重复变量名称。但是,我根本不推荐这个。相反,我建议只让您的函数打印出矩阵的内容(在|s 之间),然后执行以下操作:

cout << "A = ";
out3x3(A);

变量名的打印应该完全独立于矩阵内容的打印。考虑以下类比:

int x = 5;
cout << x;

这只是打印出 的值x,仅此而已。如果我想标记它,我必须手动执行:

int x = 5;
cout << "x = " << x;

谁知道呢?operator<<也许你会为你的类型重载mat3x3,很快你就会这样做:

cout << "A = " << A;

漂亮多了。

于 2013-03-12T13:16:13.880 回答
1

您可以使用宏作为包装器来调用它

#define OUT3X3(mat)        \
    out3x3(&mat, ##mat);

并将函数原型更改为

void out3x3(mat3x3 &A, string name)

电话是

OUT3X3(A);
于 2013-03-12T13:19:04.247 回答