传递给构造函数的 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)
{}
我只是想在 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)
{}