微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决传递给构造函数的C ++变量未正确传递

我只是想在C ++中建立一些简单的类。我正在尝试创建一个包含价格(双精度),数量(整数)和样式(std :: string)的订单类型

这是我的订单。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,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,std::string style) : limit_price(limit_price),quantity(quantity),style(style)
{}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。