进入重载<<运算符函数的对象是否必须是常量?
Do objects Coming into the Overloaded << Operator Function have to be Constants?
我有一个程序 class 我正在写我们重载运算符的地方。除了插入运算符,我没有遇到太多麻烦。传递的对象有一个字符数组,其中存储了字符。这些字符是表示数字的 ASCII 值,ACSII 值 1 代表 1。2 代表 2。我现在需要将 char 数组转换回相应的字符(1 = 49、2 = 50 等),方法是向数组中的所有元素添加“0”。我无法更改数组的内容,因为它的对象作为常量传入。我的问题是:
传递给重载插入运算符函数的对象是否必须作为常量传递?
我非常肯定我们的教授希望我们在此函数中转换此数组。我们之前编写了整个程序,但使用了 read() 和 write() 函数而不是重载插入和提取运算符。我们在读写函数中进行了转换,他提到在此赋值中使用与先前赋值相同的代码,但改用重载运算符。我能够在之前的赋值中转换数组中的数字,因为它不是常量。这是代码:
ostream & operator<< (ostream &Out, const MyFloat & x)
{
int Counter=0;
int PrintDigits=0;
//FIGURE OUT HOW TO CONVERT BACK IN THIS FUNCTION
for (int h=0; h<=MyFloat::MAXDIGIT-1; h++)//converts from number to character
{
x.Number[h] += '0';//ISSUE is here, can't change this b/c it's const
}
Out << "0.";
for (int i=x.MAXDIGIT-1; i>=0 && x.Number[i] == '0'; --i)//counting right to left, until we reach the first non-zero number, this is used to print out the correct amount of numbers, to keep from printing trailing 0s
{
++Counter;
}
PrintDigits = 19 - Counter;
for (int j=0; j<=PrintDigits; ++j)
{
Out << x.Number[j];
}
return Out;
}
我明白了。我没有尝试更改传入的 const 对象,而是将其转换为存储在 ostream 变量 Out 中。
ostream & operator<< (ostream &Out, const MyFloat & x)
{
int Counter=0;
int PrintDigits=0;
Out << "0.";
if (x.NumberOfDigits != '0')
{
for (int i=x.MAXDIGIT-1; i>=0 && x.Number[i] == 0; --i)//counting right to left, until we reach the first non-zero number, this is used to print out the correct amount of numbers, to keep from printing trailing 0s
{
++Counter;
}
PrintDigits = 19 - Counter;
for (int j=0; j<=PrintDigits; ++j)
{
Out << (int) x.Number[j];
}
}
else
Out << "?";
return Out;
}
正如我所说,这不是我的选择,只是任务要求我做的。
我有一个程序 class 我正在写我们重载运算符的地方。除了插入运算符,我没有遇到太多麻烦。传递的对象有一个字符数组,其中存储了字符。这些字符是表示数字的 ASCII 值,ACSII 值 1 代表 1。2 代表 2。我现在需要将 char 数组转换回相应的字符(1 = 49、2 = 50 等),方法是向数组中的所有元素添加“0”。我无法更改数组的内容,因为它的对象作为常量传入。我的问题是:
传递给重载插入运算符函数的对象是否必须作为常量传递?
我非常肯定我们的教授希望我们在此函数中转换此数组。我们之前编写了整个程序,但使用了 read() 和 write() 函数而不是重载插入和提取运算符。我们在读写函数中进行了转换,他提到在此赋值中使用与先前赋值相同的代码,但改用重载运算符。我能够在之前的赋值中转换数组中的数字,因为它不是常量。这是代码:
ostream & operator<< (ostream &Out, const MyFloat & x)
{
int Counter=0;
int PrintDigits=0;
//FIGURE OUT HOW TO CONVERT BACK IN THIS FUNCTION
for (int h=0; h<=MyFloat::MAXDIGIT-1; h++)//converts from number to character
{
x.Number[h] += '0';//ISSUE is here, can't change this b/c it's const
}
Out << "0.";
for (int i=x.MAXDIGIT-1; i>=0 && x.Number[i] == '0'; --i)//counting right to left, until we reach the first non-zero number, this is used to print out the correct amount of numbers, to keep from printing trailing 0s
{
++Counter;
}
PrintDigits = 19 - Counter;
for (int j=0; j<=PrintDigits; ++j)
{
Out << x.Number[j];
}
return Out;
}
我明白了。我没有尝试更改传入的 const 对象,而是将其转换为存储在 ostream 变量 Out 中。
ostream & operator<< (ostream &Out, const MyFloat & x)
{
int Counter=0;
int PrintDigits=0;
Out << "0.";
if (x.NumberOfDigits != '0')
{
for (int i=x.MAXDIGIT-1; i>=0 && x.Number[i] == 0; --i)//counting right to left, until we reach the first non-zero number, this is used to print out the correct amount of numbers, to keep from printing trailing 0s
{
++Counter;
}
PrintDigits = 19 - Counter;
for (int j=0; j<=PrintDigits; ++j)
{
Out << (int) x.Number[j];
}
}
else
Out << "?";
return Out;
}
正如我所说,这不是我的选择,只是任务要求我做的。