传递给构造函数的 C++ 变量未正确传递

C++ variables passed to constructor are not being passed correctly

我只是想在 C++ 中设置一些简单的 类。我正在尝试创建一个接受价格 (double)、数量 (int) 和样式 (std::string)

的订单类型

这是我的 order.h

#ifndef ORDER_H
#define ORDER_H

#include <string>
#include <iostream>


class Order {
    private:
        double limit_price;
        int quantity;
        std::string style;
    public:
        Order();
        Order(double price, int quantity, std::string style);

        void print_price();
        void print();
};
#endif

我在 order.cpp 中的实现。

#include "order.h"
#include <iostream>


Order::Order(){
    limit_price = 0;
    quantity = 0;
    style = "bid";
}


Order::Order(double price, int quantity, std::string style){
    limit_price = price;
    quantity = quantity;
    style = style;
}

void Order::print_price(){
    std::cout << "limit_price = " << limit_price << std::endl;
}

void Order::print(){
    std::cout << style << " " << quantity << "@" << limit_price << std::endl;
}

这是我的简单测试代码。

#include "order.cpp"
#include <iostream>
#include <string>

int main(){

    Order null_order = Order();
    Order order = Order(12.3, 2, "bid");

    null_order.print();
    order.print();

    return 0;
}

但是,由于我不明白的原因,当我 运行 我 运行 我的测试文件,而不是获取

bid 0@0
bid 2@12.3

如我所料,我得到了类似下面的内容。

bid 0@0
 -1722935952@12.3

大负数在每个 运行 上发生变化。

在您的构造函数中,参数的名称遮蔽了成员:

Order::Order(double price, int quantity, std::string style){
    limit_price = price;
    quantity = quantity;
    style = style;
}

你觉得第二行的quantity是什么?为什么左边和右边不一样?

quantity指参数。

您可以在成员前面添加 this-> 以消除歧义,尽管这并不常见。在这种情况下,最好重命名其中一个。

无论如何你应该初始化成员而不是在构造函数的主体中赋值。在执行构造函数的主体之前初始化成员。初始化成员的一种方法是成员初始化列表:

Order::Order(double p, int q, std::string s) : limit_price(p),quantity(q),style(s)
{ /* empty body */ }

并且因为在初始化列表中没有歧义的危险,我们可以为参数使用与成员相同的名称:

Order::Order(double limit_price, int quantity, std::string style) : limit_price(limit_price),quantity(quantity),style(style)
{}