【问题标题】:c++ named elements in containerc ++容器中的命名元素
【发布时间】:2017-12-25 18:45:26
【问题描述】:

我有一堆气体,每一种都有一些属性,例如密度、原子质量等。基本上我想要一个容器,我可以在我的程序中轻松地在其中添加命名气体。我可以使用以下类来做到这一点:

class gases 
{
    class gas
    {
        double mass;
        double density;
    };

gas h2o;
gas co2;
};

我猜可能更喜欢用派生类来做这件事?即从基类气体中导出 h2o?但我不完全确定如何实现它,我也不认为这就是我想要的。我不满意的是解决方案是我必须在类定义中声明我所有的气体。这样做对我来说会更直观(在伪代码中):

object gas (mass,density)
container gases
gases.append(h2o(m,rho))

cout << "the atomic mass of water is" << gases.h2o.mass << endl;

也就是说,我正在寻找一个可以添加命名对象的容器

另一个不令人满意的解决方案是制作气体对象的矢量,但我必须记住添加气体的顺序。

【问题讨论】:

  • 听起来你想要一个像std::map这样的关联容器。
  • std::map&lt;std::string,gas&gt; gases; 应该可以工作。也许给出一个更好的定义你对“命名对象”的确切含义
  • 是的,std::map 似乎正在做我正在寻找的事情,谢谢。一个元问题:为什么这个问题会立即被否决?我并不是说不应该,我只是想了解原因,以便将来可以提出更好的问题。

标签: c++ object containers


【解决方案1】:

不确定您是否需要一个动态容器,以便您可以添加和去除气体,或者只是想保持整洁。如果是后者,也许你可以尝试这样的事情?

#include <iostream>

struct gasses
{
    struct hydrogen
    {
        static double const mass;
        static double const density;
    };

    struct helium
    {
        static double const mass;
        static double const density;
    };
};

double const gasses::hydrogen::mass = 1.00794;
double const gasses::hydrogen::density = 0.000089;
double const gasses::helium::mass = 4.002602;
double const gasses::helium::density = 0.00018;


int main()
{
    std::cout << "The density of helium is: " << std::fixed << gasses::helium::density << " g/mL" << std::endl;

    return 0;
}

打印:

The density of helium is: 0.00018 g/mL

【讨论】:

  • 这行得通,std::map 也行得通。我不知道在这种情况下更喜欢哪一个,但这绝对是我问题的答案。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-30
  • 1970-01-01
  • 2013-01-05
  • 1970-01-01
  • 1970-01-01
  • 2010-12-21
  • 2011-09-25
相关资源
最近更新 更多