如果信息有点缺乏,请原谅我,因为我正在尝试遵循建议的“询问指南”。
我创建了一个名为“Item”的类来存储项目信息,并按如下方式定义了我的构造函数:
Item::Item(std::string number, std::string name, int quantity, double price) {
itemNumber = number;
itemName = name;
quantity = quantity;
unitPrice = price;
}
我在我的主函数中初始化它是这样的:
Item temp("string", "string", 0, 0);
但是当我打印item的值时,只有itemNumber和itemName正确打印。所有打印的都是随机垃圾。然后我意识到问题是数量和价格没有初始化。那是为什么?
答案 0 :(得分:3)
尝试
this->quantity = quantity;
或(恕我直言):
Item::Item(const std::string& number, const std::string& name, int quantity_, double price) {
// ^
// ...
quantity = quantity_;
// ...
}
或(恕我直言更好)使用构造函数初始化列表:
Item::Item(const std::string& number, const std::string name&, int quantity, double price)
: itemNumber(number), itemName(name), quantity(quantity), unitPrice(price) {}
“为什么?”
参数名称当前会隐藏构造函数体范围中的成员变量名称。
就个人而言,我倾向于有类声明,如下所示
class Item {
public:
Item(const std::string& number, const std::string& name, int quantity, double price)
: itemNumber_(number)
, itemName_(name)
, quantity_(quantity)
, unitPrice_(price) {}
private:
std::string itemNumber_;
std::string itemName_;
int quantity_;
double unitPrice_
};
答案 1 :(得分:0)
quantity = quantity;
这里的两个都是参数,而不是成员变量。
要引用具有相同名称参数的函数内的成员变量,必须使用this指针,例如this->quantity = quantity;
,或者使用类名称限定它,例如Item::quantity = quantity;
或者使用初始化列表来避免此问题,并可能更有效地初始化您的类。
Item::Item(const std::string& number, const std::string& name, int quantity, double price)
: itemNumber(number)
, itemName(name)
, quantity(quantity)
, price(price)
{
}
我冒昧地将你的字符串参数作为const引用来避免复制。