【问题标题】:Access the loop result to instance of class for output将循环结果访问到类的实例以进行输出
【发布时间】:2019-10-26 07:37:24
【问题描述】:

好的,所以我为我的 C++ 班级分配了班级清单。我现在正在努力解决的问题是循环和对象创建之间的部分。

string description = "";
int id_number{0};
int quantity_number{0};
double price_value{0};

for (int count{1}; count <= inventory_num; count++)
{
    cout << endl;
    cout << "Item #" << count++ << endl;
    cout << "Enter the id number: ";
    cin >> id_number;
    cout << "Descriptiom: ";
    cin.get();
    getline(cin, description);
    cout << "Quantity on hand: ";
    cin >> quantity_number;
    cout << "Unit price: ";
    cin >> price_value;
    cout << endl;

}

InventoryItem item1(id_number, description, quantity_number, price_value);
InventoryItem item2(id_number, description, quantity_number, price_value);
InventoryItem item3(id_number, description, quantity_number, price_value);
InventoryItem item4(id_number, description, quantity_number, price_value);


item1.display(); cout << endl; 
item2.display(); cout << endl;      
item3.display(); cout << endl;
item4.display(); cout << endl;

return EXIT_SUCCESS;
}

所以问题是,例如,循环输入 4 次,但输出只显示所有输出(item1,item2,item3,item4) 的最后一次输入的数据。怎么解决这个小伙子?

【问题讨论】:

  • id_number 这样的变量不会有不同的值,具体取决于您编写它时的想法。您最近了解了数组或其他类型的集合。阅读它们。
  • 这就是疯狂的定义,写相同的语句 4 次并期待不同的结果 ;) 你可能想使用向量和类似的东西在循环的每次迭代中初始化一个项目?

标签: c++ class oop for-loop multiple-instances


【解决方案1】:

您会覆盖每次循环迭代中的值。在循环之后,最后一次迭代的值存储在您的变量中。你可以用 std::vector 修复它

#include "InventoryItem.hpp"
#include <iostream>
#include <string>
#include <vector>
using std::cout;
using std::cin;
using std::endl;
using std::string;
using std::getline;

int main() {
    string description = "";
    int id_number{0};
    int quantity_number{0};
    double price_value{0};
    std::vector<InventoryItem> items;
    for (int count{1}; count <= inventory_num; count++)
    {
        cout << endl;
        cout << "Item #" << count++ << endl;
        cout << "Enter the id number: ";
        cin >> id_number;
        cout << "Descriptiom: ";
        cin.get();
        getline(cin, description);
        cout << "Quantity on hand: ";
        cin >> quantity_number;
        cout << "Unit price: ";
        cin >> price_value;
        cout << endl;
        items.emplace_back(id_number, description, quantity_number, price_value);
    }

    items[0].display(); cout << endl; 
    items[1].display(); cout << endl;      
    items[2].display(); cout << endl;
    items[3].display(); cout << endl;

    return EXIT_SUCCESS;
}

【讨论】:

  • 效果很好,谢谢。但是我能问一下 emplace_back 在这种情况下到底做了什么吗?它是否在向量的末尾插入一个新元素,就在其当前最后一个元素之后?
  • @FloydVu0531 它在向量的末尾创建一个新元素
猜你喜欢
  • 2020-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
  • 2015-06-05
  • 1970-01-01
  • 2013-06-09
  • 2021-08-28
相关资源
最近更新 更多