2016-10-12 6 views
0

私は現在C++を新しく使っています。現在、Stroustrupのプログラミング:原則& Practice with C++を使用しています。私は本の約2/3を読んだことがあるが、しばらくPCにアクセスできないため、エクササイズに巻き込まれているだけである。私は現在、第9章の演習で、読者にDateクラスの作成を依頼しています。月の表記:enumクラスとクラス

コードは、私はのようなものを書くことができるように私の簡単なDateクラスは元々、各月を表す3文字の略語で列挙クラス月含ま

はるかにわかりやすい整数1を書くよりも
Month::jan 

、 例えば。これは、わかっているとおり、enumクラスを使用する主な目的/利点です。

Dateクラスを拡張して、特定の日付からの日数や指定した日付の週番号を計算するようになったので、enumクラスMonthを置き換えたいと思っています。 12か月を含む各月の情報(例:名前、省略名、月番号、日数)とコンテナ(実際には私がこの時点で使用している快適なベクターです)を保持するクラスまたは構造体。これにより、組織の観点から見ると、Monthクラスのスコープ内でDateクラスよりも優れたメンバー関数を記述することもできます。 、

は私の質問がある
Month.Months(1) // where Months is the Month class member vector<Month> 

:私はこの表現に変更すると

は、しかし、私は、コード内ヶ月を参照するときに列挙型クラスが提供する利便性を失い、代わりのようなものを記述する必要があります私は両方の世界のベストを私に与える私のクラスを設計できる方法はありますか?ありがとう!

+0

あなたは理由があるので、自分の['struct tm'](http://en.cppreference.com/w/cpp/chrono/c/tm)を書いてみたいですか?あなたの目標がここにあるのか分かりません。 – tadman

+0

ええ、私はあなたの目標がここにあるかどうかを調べるのに苦労しています。最初の部分は暗黙のうちに 'int'から' Month'に変換したいのではないかと思います。 –

+0

なぜ両方ではないのですか? 'enum class Month'と' class MonthInfo'のように、 '1'の代わりに' 'Month :: jan''と' 'MonthInfo(Month :: jan)'と書いて1月を表すオブジェクトをすべての月に作成できるようにしてください関連するメンバー関数このような提案をお探しですか? –

答えて

0

FWIWは、ここで私はそれをやった方法です:

https://github.com/HowardHinnant/date/blob/master/date.h#L1671-L1682

CONSTDATAconstexprのためだけ後方互換性マクロです。場合は、リンクが死んで行く:あなたはあなたのツールボックスのconstexprを持っていない場合は(C++ 11が必要です)

constexpr date::month jan{1}; 
constexpr date::month feb{2}; 
constexpr date::month mar{3}; 
constexpr date::month apr{4}; 
constexpr date::month may{5}; 
constexpr date::month jun{6}; 
constexpr date::month jul{7}; 
constexpr date::month aug{8}; 
constexpr date::month sep{9}; 
constexpr date::month oct{10}; 
constexpr date::month nov{11}; 
constexpr date::month dec{12}; 

、あなたはextern constを使用してソースに定義を置くことができます。

関連する問題