为什么我的类构造函数初始化其成员变量?

时间:2014-10-08 17:34:32

标签: c++

如果信息有点缺乏,请原谅我,因为我正在尝试遵循建议的“询问指南”。

我创建了一个名为“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正确打印。所有打印的都是随机垃圾。然后我意识到问题是数量和价格没有初始化。那是为什么?

2 个答案:

答案 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引用来避免复制。