2017-08-31 122 views
0

我有三个C++类,InventoryItem,SalesPerson和Transaction。我正在使用组合在Transaction中使用InventoryItem和SalesPerson类。我想使用用户输入,而不是在构造函数中传递值,但我无法做到这一点。任何帮助将不胜感激。以下是我的C++文件。如何在C++中使用组合作为用户输入“cin”

#include<iostream> 
    #include<string> 
    using namespace std; 

    class InventoryItem { 
    private: 
     int stockNum; double price; 
    public: 
     InventoryItem(int, double); 
     void display(); }; 
    InventoryItem::InventoryItem(int stkNum, double pr) { 
     stockNum = stkNum; 
     price = pr; 
    } 
    void InventoryItem::display() { 
     cout << "Item #" << stockNum << " costs $" << price << endl; 
    } 

    //SalesPerson class 
    class Salesperson { 
    private: 
     int idNum; 
     string name; public: 
     Salesperson(int, string); void display(); 
    }; 
    Salesperson::Salesperson(int id, string lastName) { 
     idNum = id; 
     name = lastName; 
    } 
    void Salesperson::display() { 
     cout << "Salesperson #" << idNum << " " << name << endl; 
    } 

    //Transaction(main class) 
    class Transaction { 
    private: 
     int transNum; 
     InventoryItem itemSold; 
     Salesperson seller; 
    public: 
     Transaction(int, int, double, int, string); 
     void display(); 
    }; 
    Transaction::Transaction(int num, int item, double pr, 
          int salesId, string name) : itemSold(item, pr), 
     seller(salesId, name) { 
     transNum = num; 
    } 
    void Transaction::display() { 
     cout << "Data for transaction #" << transNum << endl; itemSold.display(); 
     seller.display(); 
    } 
    int main() { 
     Transaction aSale(247, 782, 44.77, 512, "Richardson"); aSale.display(); 
     return 0; 
    } 
+0

将参数传递给构造函数没有任何问题。这是你*应该*做的方式。用户输入应分开处理。这使得代码可以在输入类型改变时重用和测试(即用户输入vs文件vs模拟)。 –

回答

0

我张贴此答案而不是评论,因为我没有在我的手机上反引号。所以,你要像做

int main() 
{ 
    int x, y, z; 
    double f; 
    string name; 

    cin >> x >> y >> f >> z >> name; 

    Transaction(x, y, f, z, name); 
    return 0; 
} 

当然,你可以把cin行成一个cin每个变量和cout说明什么,用户必须输入下一个。这看起来像cout线,串要提示与用户这

int main() 
{ 
    int x, y, z; 
    double f; 
    string name; 

    cout << "Enter x: "; 
    cin >> x; 
    cout << "Enter y: "; 
    cin >> y; 
    cout << "Enter f: "; 
    cin >> f; 
    cout << "Enter z: "; 
    cin >> z; 
    cout << "Enter name: "; 
    cin >> name; 

    Transaction(x, y, f, z, name); 
    return 0; 
} 

替换字符串。

+0

谢谢。这对我有效。我怎样才能把输出标签为每个这些输入字段。例如,cout <<“输入第一个数字”;“第二个数字”等 –

+0

我编辑答案 – campovski