我遇到了一项任务的特定部分问题,要求创建一个能够在Numbers(该类)数组中存储和存储数字的函数。
class Number {
public:
// Make a number with value 0
Number();
// Make a number with value val
Number(int val);
protected:
string value;
}
Number::Number() {
value = "0";
}
Number::Number(int val) {
value = to_string(val);
}
/*
* Ask user how many numbers they want entered and store the numbers in an array of Numbers.
* Set length parameter to # of numbers entered and return the array pointer to the caller.
*/
Number* getNumbersFromUser(int& length) {
cout << "How many number would you like to enter?";
cin >> length;
Number *numbers = new Number[length];
for (int i = 0; i < length; i++) {
cout << "Enter the number value ";
cin >> numbers[i];
}
}
int main() {
int length;
Number* numbers = getNumbersFromUser(length);
reverseAllNumbers(numbers, length);
cout << "All the numbers in reverse are:" << endl;
for (int i = 0; i < length; i++) {
numbers[i].print();
}
delete[] numbers;
cout<<endl;
似乎特别要求我使用动态数组,但我不明白我如何让用户输入Number类型的东西,因为编译器说这是不允许的。请忽略reverseAllNumbers
功能,我相信我已经找到了。
答案 0 :(得分:0)
您可以为operator>>
课程实施全局Numbers
,例如:
std::istream& operator>>(std::istream &strm, Number &n)
{
int value;
strm >> value; // or however you need to read the value...
n = Number(value);
return strm;
}
或者:
class Number {
//...
friend std::istream& operator>>(std::istream &strm, Number &n);
};
std::istream& operator>>(std::istream &strm, Number &n)
{
strm >> n.value; // or however you need to read the value...
return strm;
}
通常在覆盖全局流操作符时,应该实现成员方法来处理实际的流,然后在全局运算符中调用这些方法。这允许班级决定如何最好地自己流式传输:
class Number {
//...
void readFrom(std::istream &strm);
};
void Number::readFrom(std::istream &strm)
{
strm >> value; // or however you need to read the value...
}
std::istream& operator>>(std::istream &strm, Number &n)
{
n.readFrom(strm);
return strm;
}
如果您不允许定义自定义operator>>
,您仍然可以使用readFrom()
方法,至少:
for (int i = 0; i < length; i++) {
std::cout << "Enter the number value ";
numbers[i].readFrom(std::cin);
}
答案 1 :(得分:-2)
您可能必须在函数number
的末尾返回getNumbersFromUser
以避免内存泄漏。
其次,行cin >> number[i]
表示您正在输入Number
类型的变量,这是不允许的。它只允许原始数据类型(int,char double等)或某些内置对象(如字符串)。要在您自己定义的数据类型中获取输入,您必须重载流提取运算符>>
,或者您可以编写一个成员函数,该函数接受类数据成员中的输入并调用该函数。例如,如果您的功能类似于
void Number::takeInput () {
cin >> val;
}
现在进入功能并写number[i].takeInput()
而不是cin >> number[i]
。