2017-12-25 16 views
-2

密度、原子量などの属性を持つガスがたくさんあります。基本的には、名前のついたガスを追加することができます。クラスを使用して並べ替えることができます:コンテナ内に名前のある要素があります。

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; 

、私はのために、私は名前付きオブジェクトを追加することができたコンテナを探していますされていること。

もう1つの不満足な解決策はガスオブジェクトのベクターを作ることですが、ガスを追加する順序を覚えておく必要があります。

+2

あなたは[STD ::マップ](http://en.cppreference.com/w/cpp/container/map)のような連想コンテナをしたいような音。 –

+2

'std :: map gases;は動作するはずです。おそらく、 "名前付きオブジェクト" _が意味するものをより正確に定義することができます。 – user0042

+0

はい、 'std :: map'は私が探しているものをやっているようです。しかし、メタの質問:なぜこの質問は即決投票になったのですか?私はそれがあってはならないと言っているわけではありません、私はちょうど理由を理解したい、将来的にはより良い質問をすることができます。 – storluffarn

答えて

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 
+1

これは動作し、 'std :: map'も動作します。私はどちらがこのような状況でどちらを好むべきかわからないが、これは確かに私の質問に対する答えである。ありがとう – storluffarn

関連する問題