電子書籍の厳選無料作品が豊富!

ヘッダーファイルにstruct XXXを定義して、
struct XXX{
int x;
int y;
}

生成時に、
struct XXX param = {0,0};
のような初期化を毎回行う必要がないようにしたいのですが、
構造体を利用している時点でそれは不可能でしょうか?

そこで、structをやめて、以下のようにclassにしてしまえば解決しそうですが、

class XXX{
public:
XXX():
x(0);
y(0);
{};
~XXX(){};
int x;
int y;
}

この解決方法について同じような経験あるかたいらっしゃいましたらコメントいただけませんか?
私的には少し大げさなような気がしています。
classにpublic変数を持たせるのも変な感じがしますし、そもそも構造体用のclassを作ることがあるのかなって疑問に思ってます。
お気づきかと思いますが経験が浅いので、この解決方法が常套手段なのかどうかが知りたいところです。

お詳しい方、つっこみでも良いのでお願いします。

A 回答 (5件)

構造体にもコンストラクタを定義できます。



>そこで、structをやめて、以下のようにclassにしてしまえば解決しそうですが、
と同じですけど。

>classにpublic変数を持たせるのも変な感じがしますし、
>そもそも構造体用のclassを作ることがあるのかなって疑問に思ってます。
用途が明確であれば、別に変ではないと思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/09/20 22:03

>これは引数が1つの場合ではないでしょうか?


デフォルト値を与えれば、XXX hoge(5) は XXX hoge(5,0)と解釈されます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/09/22 23:47

>便利というのは?前々からexplicitの旨みを感じる機会がなかったのですが。

。。

コンストラクタにデフォルト引数を与えておけば、XXX hoge; とするケースにも、
XXX fuge(1,1); とするケースにも対応できますね。

explicit 指定子は hoge = 5; のような int から XXX への暗黙的な変換を禁止することで、
コーディングミスを減らそうという意図ですね。
    • good
    • 0
この回答へのお礼

引き続きご回答ありがとうございます。
>explicit 指定子は hoge = 5; のような int から XXX への暗黙的な変換を禁止することで、
>コーディングミスを減らそうという意図ですね。

これは引数が1つの場合ではないでしょうか?
そもそも2つ以上のときにはコンパイラによっては暗黙的な変換ができてしまうのでしょうか?

お礼日時:2008/09/21 23:39

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

つまり「構造体」と「クラス」は基本的に同じものです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/09/20 22:08

 こんにちは。



>>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){}
 とした方が、何かと便利です。

 まぁ、見慣れるまでは違和感あるかもしれません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/09/20 22:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!