- ベストアンサー
構造体の初期化とクラスの利用について
- 構造体を生成する際の初期化を簡略化する方法について教えてください。
- 構造体を利用している場合、初期化を毎回行わなくてもよい方法はありますか?
- 構造体をクラスに変更することで初期化を簡潔にする方法についてアドバイスをいただけますか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
構造体にもコンストラクタを定義できます。 >そこで、structをやめて、以下のようにclassにしてしまえば解決しそうですが、 と同じですけど。 >classにpublic変数を持たせるのも変な感じがしますし、 >そもそも構造体用のclassを作ることがあるのかなって疑問に思ってます。 用途が明確であれば、別に変ではないと思います。
その他の回答 (4)
- koko_u_
- ベストアンサー率18% (459/2509)
>これは引数が1つの場合ではないでしょうか? デフォルト値を与えれば、XXX hoge(5) は XXX hoge(5,0)と解釈されます。
お礼
そっ、そうなんですか。 いままで引数1つの場合のみ有効なものだと思ってました。 とすると、explicitは必要ですね。 ありがとうございます!
- koko_u_
- ベストアンサー率18% (459/2509)
>便利というのは?前々からexplicitの旨みを感じる機会がなかったのですが。。。 コンストラクタにデフォルト引数を与えておけば、XXX hoge; とするケースにも、 XXX fuge(1,1); とするケースにも対応できますね。 explicit 指定子は hoge = 5; のような int から XXX への暗黙的な変換を禁止することで、 コーディングミスを減らそうという意図ですね。
お礼
引き続きご回答ありがとうございます。 >explicit 指定子は hoge = 5; のような int から XXX への暗黙的な変換を禁止することで、 >コーディングミスを減らそうという意図ですね。 これは引数が1つの場合ではないでしょうか? そもそも2つ以上のときにはコンパイラによっては暗黙的な変換ができてしまうのでしょうか?
- Tacosan
- ベストアンサー率23% (3656/15482)
C++ において「構造体」とは「デフォルトですべて public なクラス」にほかなりません。つまり「構造体」と「クラス」は基本的に同じものです。
お礼
外部関数を持たないものは構造体、 外部関数を持つものをクラスと 使い分けているかたもいるようですが、 業界的にはどうなのでしょうね? あまり精通していないので分かりませんが、 基本的には違いのですね。 ありがとうございます。
- machongola
- ベストアンサー率60% (434/720)
こんにちは。 >>classにpublic変数を持たせるのも変な感じがしますし、そもそも構造体用のclassを作ることがあるのかなって疑問に思ってます。 STLのstd::pair<T1, T2>辺りが其の例かもしれません。 後コンストラクタですが、 XXX() : x(0), y(0){ } とするよりは、 explicit XXX(int __x = 0, int __y = 0) : x(__x), y(__y){ } とした方が、何かと便利です。 まぁ、見慣れるまでは違和感あるかもしれません。
お礼
explicitはコンストラクタの最適化を明示的にしないようにすることですね。 便利というのは?前々からexplicitの旨みを感じる機会がなかったのですが。。。
お礼
構造体にもコンストラクタを定義できるんですね。 ありがとうございます。 structとclassの違いはないのですね。