显示传递给c++类构造函数的枚举值



我编写了一个简短的测试代码,用于将枚举值传递给类构造函数。它与编译器一起工作得很好。但是,输出很奇怪。Display()不显示枚举值。它只显示"当前代理的策略是"。这段代码有什么问题?谢谢你!

#include <iostream>
using namespace std;
class Agent
{
public:
    enum Strat {BuyandHold, Momentum, TA};
    Agent(Strat strategy=BuyandHold);
    ~Agent();
    void Display();
private:
    Strat strategy;
};
Agent::Agent(Strat strategy)
{
    strategy = strategy;
}
Agent::~Agent()
{
    cout << "Bye!" << endl;
}
void Agent::Display()
{
    cout << "The strategy of the current agent is ";
    switch(strategy){
    case BuyandHold : cout << "BuyandHold." << endl; break;
    case Momentum : cout << "Momentum." << endl; break;
    case TA : cout << "TA." << endl; break;
    }
}
int main()
{
    Agent a(Agent::TA);
    a.Display();
    return 0;
}

您需要将局部参数名称声明与类成员区分开来。只需为初始化参数提供一个不同的名称:

Agent::Agent(Strat strategy_)
: strategy(strategy_) {}

我更喜欢_后缀来标记类成员变量或参数名,因为这两种方式都是标准兼容的(使用_前缀不会,而其他任何像m_前缀的类成员变量都是笨拙的IMHO)。

也注意:
我一直在使用成员初始化列表来分配类成员变量,这是大多数用例的正确选择。

相关内容

  • 没有找到相关文章

最新更新