• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:構造体を生成時にわざわざ初期化しないようにしたいのですが。)

構造体の初期化とクラスの利用について

このQ&Aのポイント
  • 構造体を生成する際の初期化を簡略化する方法について教えてください。
  • 構造体を利用している場合、初期化を毎回行わなくてもよい方法はありますか?
  • 構造体をクラスに変更することで初期化を簡潔にする方法についてアドバイスをいただけますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

構造体にもコンストラクタを定義できます。 >そこで、structをやめて、以下のようにclassにしてしまえば解決しそうですが、 と同じですけど。 >classにpublic変数を持たせるのも変な感じがしますし、 >そもそも構造体用のclassを作ることがあるのかなって疑問に思ってます。 用途が明確であれば、別に変ではないと思います。

y_anily
質問者

お礼

構造体にもコンストラクタを定義できるんですね。 ありがとうございます。 structとclassの違いはないのですね。

その他の回答 (4)

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.5

>これは引数が1つの場合ではないでしょうか? デフォルト値を与えれば、XXX hoge(5) は XXX hoge(5,0)と解釈されます。

y_anily
質問者

お礼

そっ、そうなんですか。 いままで引数1つの場合のみ有効なものだと思ってました。 とすると、explicitは必要ですね。 ありがとうございます!

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.4

>便利というのは?前々からexplicitの旨みを感じる機会がなかったのですが。。。 コンストラクタにデフォルト引数を与えておけば、XXX hoge; とするケースにも、 XXX fuge(1,1); とするケースにも対応できますね。 explicit 指定子は hoge = 5; のような int から XXX への暗黙的な変換を禁止することで、 コーディングミスを減らそうという意図ですね。

y_anily
質問者

お礼

引き続きご回答ありがとうございます。 >explicit 指定子は hoge = 5; のような int から XXX への暗黙的な変換を禁止することで、 >コーディングミスを減らそうという意図ですね。 これは引数が1つの場合ではないでしょうか? そもそも2つ以上のときにはコンパイラによっては暗黙的な変換ができてしまうのでしょうか?

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

C++ において「構造体」とは「デフォルトですべて public なクラス」にほかなりません。つまり「構造体」と「クラス」は基本的に同じものです。

y_anily
質問者

お礼

外部関数を持たないものは構造体、 外部関数を持つものをクラスと 使い分けているかたもいるようですが、 業界的にはどうなのでしょうね? あまり精通していないので分かりませんが、 基本的には違いのですね。 ありがとうございます。

回答No.2

 こんにちは。 >>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){ }  とした方が、何かと便利です。  まぁ、見慣れるまでは違和感あるかもしれません。

y_anily
質問者

お礼

explicitはコンストラクタの最適化を明示的にしないようにすることですね。 便利というのは?前々からexplicitの旨みを感じる機会がなかったのですが。。。