■過去ログ置き場に戻る■ 1- 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

C++相談室 part24
1 名前:v(^・^)v :03/10/19 15:53
C++に関する質問はこちらへどうぞ。
ただし質問の前にFAQに一通り目を通してください。
また、テンプレートライブラリ(STL含む)に関する質問は
専用の別スレへどうぞ。

過去スレ、関連スレ、関連リンクなどはこちら>>2-15

2 名前:v(^・^)v :03/10/19 15:54
■過去スレ■
 1 http://mimizun.mine.nu:81/2chlog/tech/piza.2ch.net/tech/kako/980/980175292.html
 2 http://pc.2ch.net/tech/kako/996/996640937.html
 3 http://pc.2ch.net/tech/kako/1003/10038/1003832761.html
 4 http://pc.2ch.net/tech/kako/1009/10090/1009071535.html
 5 http://pc.2ch.net/tech/kako/1014/10142/1014217496.html
 6 http://pc.2ch.net/tech/kako/1018/10184/1018454705.html
 7 http://pc.2ch.net/tech/kako/1021/10217/1021787032.html
 8 http://pc3.2ch.net/tech/kako/1025/10250/1025010364.html
 9 http://pc3.2ch.net/tech/kako/1027/10273/1027347982.html
 10 http://pc3.2ch.net/tech/kako/1029/10293/1029315669.html
 11 http://pc3.2ch.net/tech/kako/1032/10323/1032345774.html
 12 http://pc3.2ch.net/tech/kako/1035/10350/1035005882.html
 13 http://pc3.2ch.net/tech/kako/1038/10380/1038031395.html
 14 http://pc2.2ch.net/tech/kako/1041/10413/1041328679.html
 15 http://pc2.2ch.net/tech/kako/1043/10436/1043605481.html
 16 http://pc2.2ch.net/tech/kako/1045/10457/1045746245.html
 17 http://pc2.2ch.net/tech/kako/1047/10475/1047560042.html
 18 http://pc2.2ch.net/tech/kako/1050/10501/1050177746.html
 19 http://pc2.2ch.net/tech/kako/1052/10526/1052625846.html
 20 http://pc2.2ch.net/tech/kako/1055/10551/1055162298.html
 21 http://pc2.2ch.net/tech/kako/1057/10575/1057580107.html
 22 http://pc2.2ch.net/tech/kako/1060/10603/1060361082.html
 23 http://pc2.2ch.net/test/read.cgi/tech/1062690663/

3 名前:デフォルトの名無しさん :03/10/19 15:56
おおーーーーまじでーーーー
乙カレーーーーー

4 名前:v(^・^)v :03/10/19 15:56
■基本■
[C++ FAQ]
 http://www.parashift.com/c++-faq-lite/
 http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
  Cとその仕様を比較しながらの解説なので分かりやすい。
  ***** 質問の前に必ずこの二つに目を通してください *****

[禿 Stroustrup]
 http://www.research.att.com/~bs/
[C++ Final Draft International Standard]
 http://www.kuzbass.ru/docs/isocpp/
 http://www.kuzbass.ru/docs/ansi_iso_iec_14882_1998.pdf
[JTC1/SC22/WG21 - C++]
 http://std.dkuug.dk/jtc1/sc22/wg21/

[C/C++ Users Journal]
 http://www.cuj.com/
[cppll (ML)]
 http://www.trickpalace.net/cppll/ (日本語)

5 名前:v(^・^)v :03/10/19 15:56
■Books■
amazon.com C,C++関連書籍
 http://www.amazon.com/exec/obidos/tg/browse/-/3956/ref=br_bx_c_1_3/

The C++ Programming Language
 http://www.amazon.com/exec/obidos/ASIN/0201700735/
 http://www.amazon.co.jp/exec/obidos/ASIN/475611895X/ (翻訳)
C++ Primer (3rd Edition)
 http://www.amazon.com/exec/obidos/ASIN/0201824701/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756140068/ (翻訳)
The C++ Standard Library
 http://www.amazon.com/exec/obidos/ASIN/0201379260/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756137156/ (翻訳)
Effective C++
 http://www.amazon.com/exec/obidos/ASIN/0201924889/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756118089/ (翻訳)
More Effective C++
 http://www.amazon.com/exec/obidos/ASIN/020163371X/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756118534/ (翻訳)
Exceptional C++
 http://www.amazon.com/exec/obidos/ASIN/0201615622/
 http://www.amazon.co.jp/exec/obidos/ASIN/4894712709/ (翻訳)
More Exceptional C++
 http://www.amazon.com/exec/obidos/ASIN/020170434X/
Effective STL
 http://www.amazon.com/exec/obidos/ASIN/0201749629/
 http://www.amazon.co.jp/exec/obidos/ASIN/4894714108/ (翻訳)
Modern C++ Design
 http://www.amazon.com/exec/obidos/ASIN/0201704315/
 http://www.amazon.co.jp/exec/obidos/ASIN/4894714353/ (翻訳)
C++ Templates
 http://www.amazon.com/exec/obidos/ASIN/0201734842/

6 名前:v(^・^)v :03/10/19 15:57
■Compiler■
[GCC]
 http://gcc.gnu.org/
 (Windows上でのPOSIX環境構築 http://www.cygwin.com)
[Borland C++ Compiler]
 http://www.borland.co.jp/cppbuilder/freecompiler/
[.NET Framework SDK]
 http://www.microsoft.com/downloads/details.aspx?FamilyId=9B3A2CA6-3647-4070-9F41-A333C6B9181D&displaylang=ja
[DigitalMars]
 http://www.digitalmars.com/
[OpenWatcom]
 http://www.openwatcom.org/
[Comeau]
 http://www.comeaucomputing.com/
[Intel]
 http://www.intel.com/software/products/compilers/
[Metrowerks]
 http://www.metrowerks.com/mw/default.htm

7 名前:デフォルトの名無しさん :03/10/19 15:57
■Libraries■
[Boost]
 Boost http://www.boost.org/
 (日本語) http://user.ecc.u-tokyo.ac.jp/~s31552/wp/boost/
 (日本語) http://www.kmonos.net/alang/boost/
[STL]
 STLport http://www.stlport.org/
 SGI-STL http://www.sgi.com/tech/stl/
 STLFilt http://www.bdsoft.com/tools/stlfilt.html
 (日本語) http://www005.upp.so-net.ne.jp/episteme/html/stlprog/
 (日本語) http://www.wakhok.ac.jp/~sumi/stl/
[Loki]
 http://www.moderncppdesign.com/
 LokiPort-MSVC7 http://www.geocities.com/rani_sharoni/LokiPort.html
 LokiPort-MSVC6sp5 http://fara.cs.uni-potsdam.de/~kaufmann/?page=lokiport
[他]
 ACE http://www.cs.wustl.edu/~schmidt/
 Blitz++ http://www.oonumerics.org/blitz/
 flex++ Bison++ http://www.idiom.com/free-compilers/TOOL/BNF-15.html
[他ライブラリリンク集]
 http://www.trumphurst.com/cpplibs/cpplibs.phtml
 (日本語) http://www.kmonos.net/alang/cpp/lib.html

8 名前:v(^・^)v :03/10/19 15:57
■Libraries■
[Boost]
 Boost http://www.boost.org/
 (日本語) http://user.ecc.u-tokyo.ac.jp/~s31552/wp/boost/
 (日本語) http://www.kmonos.net/alang/boost/
[STL]
 STLport http://www.stlport.org/
 SGI-STL http://www.sgi.com/tech/stl/
 STLFilt http://www.bdsoft.com/tools/stlfilt.html
 (日本語) http://www005.upp.so-net.ne.jp/episteme/html/stlprog/
 (日本語) http://www.wakhok.ac.jp/~sumi/stl/
[Loki]
 http://www.moderncppdesign.com/
 LokiPort-MSVC7 http://www.geocities.com/rani_sharoni/LokiPort.html
 LokiPort-MSVC6sp5 http://fara.cs.uni-potsdam.de/~kaufmann/?page=lokiport
[他]
 ACE http://www.cs.wustl.edu/~schmidt/
 Blitz++ http://www.oonumerics.org/blitz/
 flex++ Bison++ http://www.idiom.com/free-compilers/TOOL/BNF-15.html
[他ライブラリリンク集]
 http://www.trumphurst.com/cpplibs/cpplibs.phtml
 (日本語) http://www.kmonos.net/alang/cpp/lib.html

9 名前:v(^・^)v :03/10/19 15:58
■関連スレ■
[【C++】template 統合スレ -- STL/Boost/Loki, etc.]
 http://pc2.2ch.net/test/read.cgi/tech/1047978546/l50
[【C++】Boost使い集まれ!]
 http://pc2.2ch.net/test/read.cgi/tech/1033830935/l50
[C/C++の宿題やらせてください。]
 http://pc2.2ch.net/test/read.cgi/tech/1058283913/l50
[初心者にVisual C++を教えるスレ]
 http://pc2.2ch.net/test/read.cgi/tech/1056280510/l50
[VisualC++(MFC限定)相談室]
 http://pc2.2ch.net/test/read.cgi/tech/1056584836/l50
[ATL 相談室]
 http://pc2.2ch.net/test/read.cgi/tech/1029029882/l50
[C/C++でのWindowsPrograming議論スレ(質問お断り)]
 http://pc2.2ch.net/test/read.cgi/tech/1049790146/l50
[COMの世界を斬る!]
 http://pc2.2ch.net/test/read.cgi/tech/981823340/l50
[managed C++ やろうぜ!!]
 http://pc2.2ch.net/test/read.cgi/tech/1014486422/l50
[C++Builder相談室]
 http://pc2.2ch.net/test/read.cgi/tech/1054280736/l50
[タダで使えるBorland C++]
 http://pc2.2ch.net/test/read.cgi/tech/1054390397/l50
[Code of the Nerds" Digital Mars C/C++]
 http://pc2.2ch.net/test/read.cgi/tech/1044210976/l50
[GCCについて]
 http://pc2.2ch.net/test/read.cgi/tech/1046179115/l50
[OpenWatcom C++]
 http://pc2.2ch.net/test/read.cgi/tech/1033433728/l50
[タダで最強!フリーC/C++コンパイラ]
 http://pc2.2ch.net/test/read.cgi/tech/1035882599/l50

10 名前:デフォルトの名無しさん :03/10/19 15:59
ごく炉宇様

11 名前:デフォルトの名無しさん :03/10/19 15:59
俺には7と8が同じに見えるぜ。

12 名前:デフォルトの名無しさん :03/10/19 16:01
【C++】template 統合スレ -- Part3
http://pc2.2ch.net/test/read.cgi/tech/1066493064/
Borland C++ BuilderX
http://pc2.2ch.net/test/read.cgi/tech/1065260556/
C++Builder相談室 Part7
http://pc2.2ch.net/test/read.cgi/tech/1061594556/
C/C++の宿題をやらせて。おながい。13代目
http://pc2.2ch.net/test/read.cgi/tech/1064541405/


13 名前:デフォルトの名無しさん :03/10/19 16:05
でも、実際のとこPart24まで着たらネタがないな〜

14 名前:俺達 ◆Fu3PvkO9fs :03/10/19 16:16
>>13
じゃあ、私を育ててください
ちなみにJavaからの移行組ですが
classを書くときに

class S{
private:
int id;
char* name;
public:
char* getName(){
return name;
}
int getId(){
return id;
}
void setId(int id){
this.id=id;
}
void setName(char* name){
this.name=name;
}
}

などと、
1.アクセサ経由でプロパティーにアクセスするようなコード書きたがる
2.メソッドの定義と実装をclass内に書きたがる

こういうのはC++の世界では嫌われますかね?

15 名前:デフォルトの名無しさん :03/10/19 16:20
>>14
1…別に
2…インラインメソッドになるけどプログラムが肥大化してもいいならいいんじゃない

そもそも>>14のコードはどう見てもバグってて無茶苦茶だけど

16 名前:デフォルトの名無しさん :03/10/19 16:21
>>14
嫌われます。

17 名前:デフォルトの名無しさん :03/10/19 16:23
つーか折角のOOもどき言語なんだから、
publicに変数置くような馬鹿の方が嫌われるよ。

18 名前:デフォルトの名無しさん :03/10/19 16:24
>>15
> 2…インラインメソッドになるけどプログラムが肥大化してもいいならいいんじゃない

>>14 ぐらいならむしろオブジェクトコードサイズは減るケースも多いと思うが。

19 名前:デフォルトの名無しさん :03/10/19 16:24
アクセサはインラインメソッドでいいよ。
インラインにしないと関数呼び出しの分無駄だし。

20 名前:デフォルトの名無しさん :03/10/19 16:25
char* name;
char* getName(){
return name;
}
void setName(char* name){
this->name=name;
}

この辺は意図してやってるんじゃなければホームラン級の馬鹿コードだが。

21 名前:デフォルトの名無しさん :03/10/19 16:26
getterはconstメソッドにしてクラスの中身を変えない事を明示すべき。
int getId() const {
return id;
}

22 名前:デフォルトの名無しさん :03/10/19 16:27
クラスの中身というかインスタンスの中身ね

23 名前:デフォルトの名無しさん :03/10/19 16:27
>>14
別に普通じゃね?
アクセサにブレークポイント置けるしね。

ただ、俺思ったんだけどさ
>>14みたいなの手書きするのってイクナイ!(AA略)よね。
マクロみたいなの書けない?

private_proparty(name_t, name)

みたいなのから

private :
name_t name;
void setName(name_t name_){ name=name_; }
name_t getName(){ return name; }

を自動生成すんの。
getNameとかキャピタライズはムリだろうけど。

24 名前:デフォルトの名無しさん :03/10/19 16:28
>>23
この辺読んでね
http://pc2.2ch.net/test/read.cgi/tech/1062690663/761-


25 名前:安達 ◆Fu3PvkO9fs :03/10/19 16:31
>>15、20
その辺のポインタ系は突っ込まないで下さい
確かに間違ってました
あとクラスの最後の中カッコにセミコロンもつけたすの忘れてました

まあ、問題はそこではなくて
こういう書き方はダメなのかな?と思ったわけです
特にメソッド(関数メンバか?)なんて外に書いてたら

void S::setName(char* name){・・・}
などと、余計わかりずらい用な気がしてたんです

ちなみに名前は「俺達」じゃなくて「安達」です。すいません

26 名前:デフォルトの名無しさん :03/10/19 16:31
わざわざ例外仕様書いてる人いる?
const std::string& getName() const throw() { return name; }
みたいな感じで。



27 名前:デフォルトの名無しさん :03/10/19 16:33
>>25
宣言と定義を分離すると、ファイルの依存性を減らせる。何でもかんでもヘッダに書くと、
メソッド1つ書き換えるだけでフルビルド状態になって大変だぞ。

でも、俺も setter/getter 程度ならヘッダに書くけど。

28 名前:安達 ◆Fu3PvkO9fs :03/10/19 16:37
>>27
そうそう、あとヘッダファイルの使い方がわかりません
というか、なぜこんなものが必要なのかと思うわけです

定数とか定義するのなら
ヘッダファイルとかソース内ではなくて
別のリソースに書いてそれから読み込ませるのが
いろんな意味でイイと思ってました
それとも、俺の知らない便利な機能があるのですかね?


関数のポインタは便利ですね

29 名前:23 :03/10/19 16:37
#define private_property(name_t, name) \
private : \
name_t name; \
void set_ ## name(name_t name ## _) { name=name ## _; } \
name_t get_ ## name(){ return name; }

使わね?

30 名前:安達 ◆Fu3PvkO9fs :03/10/19 16:38
>>29
それはどうやって使うんですか?

31 名前:23 :03/10/19 16:41
クラス内で
private_property(hoge_t, hage)
って1行書くと、その部分が

private :
hoge_t hage;
void set_hage(hoge_t hage_) { hage=hage_; }
hoge_t get_hage(){ return hage; }

に置き換わるの。

32 名前:デフォルトの名無しさん :03/10/19 16:42
>>29
setterとgetterはprivateなの?
型ごとにその変なマクロを書くの?

33 名前:デフォルトの名無しさん :03/10/19 16:43
>>31
hoge_t がポインタだと憤死確定だな……。intrusive_ptr や shared_ptr と組み合わせて使うのが
吉か?

34 名前:デフォルトの名無しさん :03/10/19 16:43
つーかマクロでやったらIDEのコード支援機能が効かなくなるんでないの?

35 名前:23 :03/10/19 16:43
あくまで例だよ
別に変じゃないよ

36 名前:23 :03/10/19 16:44
おまいら馬鹿じゃねーんなら応用を利かせろよ


37 名前:デフォルトの名無しさん :03/10/19 16:45
応用してる暇があったら手動で書いた方が速いね。

38 名前:デフォルトの名無しさん :03/10/19 16:48
安達さんに質問です。
Java使ってた人がC++使うことになった理由は何ですか?

39 名前:デフォルトの名無しさん :03/10/19 16:48
どっちかってと、IDEなりエディタの入力支援でやれって感じだが。

40 名前:デフォルトの名無しさん :03/10/19 16:48
つまらん話題だな

41 名前:デフォルトの名無しさん :03/10/19 16:48
とりあえずそんな変なマクロ使ってるコード見たら窓から投げ捨てるね。

42 名前:23 :03/10/19 16:49
手動よりは頭いいよ
サルじゃねーんだから

43 名前:デフォルトの名無しさん :03/10/19 16:49
>>39
で、getterとsetterを自動で書いてくれるC++用IDEはどこにありますか?

44 名前:デフォルトの名無しさん :03/10/19 16:50
>>42
そもそもgetterとsetterの意義が分かってるならそんなウンコマクロは書かない。

45 名前:デフォルトの名無しさん :03/10/19 16:52
おれマクロで23みたいなことよくするけど
ゴミですか?

46 名前:デフォルトの名無しさん :03/10/19 16:52
>>45
まちがいない。

47 名前:デフォルトの名無しさん :03/10/19 16:53
テンプレートで同じ様なことできない?

48 名前:デフォルトの名無しさん :03/10/19 16:53
>>45
読込専用のプロパティやら、
書込だけ公開するプロパティを作りたい場合はどうするんですか?
全種類マクロ作りますか?

49 名前:デフォルトの名無しさん :03/10/19 16:54
エディタのマクロかなんかで置換すりゃ一発な気も
うちのは変数宣言書いた後ctrl+/でgetter、setter出来ます

50 名前:デフォルトの名無しさん :03/10/19 16:55
値をそのまま操作するだけのsetter/getterのマクロを使うぐらいなら、
変数をpublicにしたって同じじゃん。

51 名前:デフォルトの名無しさん :03/10/19 16:56
>>49
get,setするものがプリミティブ型かどうかや、ポインタかどうかなども見分けるようにしているのですか?

52 名前:デフォルトの名無しさん :03/10/19 16:56
>>50
分かってない香具師キタ━━━━━(゚∀゚)━━━━━!!

53 名前:52 :03/10/19 16:57
つーかマクロなら確かに意味ないや。
自分でメソッド書けば、そのままでも意味あるけどね。

54 名前:デフォルトの名無しさん :03/10/19 16:57
>>50
変数のアドレス取られたりしないし、後々 Set するときに何かしたいとか言うこともあるかもしれないからな。
その時だけを考えてるようじゃまだまだ素人だぞ。

55 名前:デフォルトの名無しさん :03/10/19 16:58
>>54
後々何かしたくてもマクロで作っちゃってたら結局作り直しだろ。

56 名前:デフォルトの名無しさん :03/10/19 16:58
>>50
世の中にはpublic変数に代入範囲の制限をつけたり
継承したりとあとから変更したくなっても
簡単に変更できない言語があるんですよ。

ちなみに簡単に変更できるようになったものは
プロパティと呼ばれます。

57 名前:23 :03/10/19 16:59
>45
君の感性は素晴らしいよ

>47
できないよ

>48
作れば?

>49
アホですね

>50
意義がわかってないね

>53
後々マクロに仕込めるじゃん

58 名前:デフォルトの名無しさん :03/10/19 16:59
結論

*********************************
getterとsetterをプリプロセッサで書くな。
*********************************

59 名前:デフォルトの名無しさん :03/10/19 16:59
>>57
偽物は帰っていいよ

60 名前:デフォルトの名無しさん :03/10/19 17:01
>>55
その部分だけマクロはずして手で書けばいいだけだろ。

61 名前:23 :03/10/19 17:01
こういうとここそプリプロセッサの出番なんだよ
わかってないやつ大杉でつね

62 名前:安達 ◆Fu3PvkO9fs :03/10/19 17:01
>>31
そうか、そうでしたね
そのまま埋め込まれるみたいな機能がありましたね

>>38
いや、C++は仕事関係ではなく単に自分の趣味みたいなものです
JavaやらPerlやらC#やらやってきましたが
C/C++っていうのはあまり触れた経験がなかったのです
C言語をほんの入り口程度やっただけで
Javaに配属されましたから・・・
これじゃプログラマとはいえないなと、なんとなく思いまして・・・
なんか不安なんですよね
今までずっとC/C++はいつか覚えなきゃいかんと気になってましてね
で今回本屋でC++何とか第3版とか言う本買ってやってるんですが
Cからやった方がいいと自分で思ってます
でも、関数とかさっきのchar*とかの扱いとか考えても
クラスでやった方が自分としては理解が楽なので
C++からやってます

63 名前:デフォルトの名無しさん :03/10/19 17:02
とりあえず、これ系のマクロは他者に嫌がられることが多そうだから使わない。

64 名前:23 :03/10/19 17:03
>63
そんなんじゃboostなんて使えないんじゃん?

65 名前:デフォルトの名無しさん :03/10/19 17:04
boostとは訳が違うだろ

66 名前:デフォルトの名無しさん :03/10/19 17:06
文字列置換してコード量が減ったと自己満足するだけの、
マクロの使用はカンベン。

67 名前:デフォルトの名無しさん :03/10/19 17:06
boostの思想は理解してもいいと思うけど
個人それぞれの思想がたっぷり仕込まれたソースを複数見るのはいやだ。


68 名前:デフォルトの名無しさん :03/10/19 17:07
23に同意
だらだらアクセサ書き並べるよりよっぽど健全だな

69 名前:デフォルトの名無しさん :03/10/19 17:07
private_property(hoge_t, hage)
protected_property(hoge_t, hage)
public_property(hoge_t, hage)
private_readonly_property(hoge_t, hage)
protected_readonly_property(hoge_t, hage)
public_readonly_property(hoge_t, hage)
private_writeonly_property(hoge_t, hage)
protected_writeonly_property(hoge_t, hage)
public_writeonly_property(hoge_t, hage)
public_read_and_protected_write_property(hoge_t, hage)
以下省略

70 名前:デフォルトの名無しさん :03/10/19 17:08
>>68
自演はいいよ

71 名前:デフォルトの名無しさん :03/10/19 17:08
そもそもsetter/getterがずらずらならぶような状況はおかしくないか?

72 名前:デフォルトの名無しさん :03/10/19 17:08
>>69
privateやpublicなんかもパラメータ化すればすっきりするよ

73 名前:デフォルトの名無しさん :03/10/19 17:08
23って反応いいよね

74 名前:デフォルトの名無しさん :03/10/19 17:08
>>71
モデルなら問題無いような気もする

75 名前:デフォルトの名無しさん :03/10/19 17:10
やりたい事が実現出来るのなら好きなように組めばいいと思う…

76 名前:デフォルトの名無しさん :03/10/19 17:10
で、マクロを使ったとしてIDEの補完が効かなくなる問題に対してはどう対処するの?

77 名前:デフォルトの名無しさん :03/10/19 17:10
>>51
分ける事は出来てるんだけど、ただのキー操作マクロなんで
見分けるなんて凄い物ではなく、単に操作の違いだけっす。
何て言うかctrl+shift+←とshift+endです。

78 名前:安達 ◆Fu3PvkO9fs :03/10/19 17:11
>>71
自分の経験だと、データベースのカラムが多い時は
どうしてもそうなるのがあたりまえなんですが
といか、入れ物としてclassを使う場合なのですがね

79 名前:デフォルトの名無しさん :03/10/19 17:12
>>66
マクロ → ソースコード量削減 としか発想できない奴は帰れ。

80 名前:23 :03/10/19 17:12
>71
スタブとか変数の数だけ需要があるじゃん
リリースでは必要ないかもしれないけど

81 名前:デフォルトの名無しさん :03/10/19 17:13
マクロによるプロパティの実装

良い所
ソースコード削減

悪い所
IDEの補完が効かなくなる


適当に追記して下さい。

82 名前:デフォルトの名無しさん :03/10/19 17:14
>>79
23の例にコード量削減以外の意味があるのか?
マクロ使う以上はもっと確固たる理由ってもんがなければならないと思うが。

83 名前:デフォルトの名無しさん :03/10/19 17:14
つーか自クラス内のメソッドからもアクセサ経由でメンバ変数にアクセスするのが正しいOOだろ

84 名前:23 :03/10/19 17:15
おまいらIDEの補完がそんなに重要か?
それよりもマクロ解釈しないIDEなんて使うな
って話が先じゃないのか?

85 名前:デフォルトの名無しさん :03/10/19 17:15
>>83
ネタにしては面白くない。

86 名前:デフォルトの名無しさん :03/10/19 17:17
マクロによるプロパティの実装

良い所
・ソースコード削減

悪い所
・IDEの補完が効かなくなる
・見通しが悪くなる
(特にC++ではpublic:やprotected:などのアクセス指定子が実際の変数宣言とは別の行にあり、
見やすい所にあるのが普通なので、なんでpublic:が無いのにアクセスできるんだとか他人が見たら勘違いする)


適当に追記して下さい。

87 名前:デフォルトの名無しさん :03/10/19 17:18
>>85
マーチンファウラーのリファクタリング読んでね(はぁと

88 名前:23 :03/10/19 17:18
マクロを使うってのは、コード量削減以外にも
形式化って意味があるんじゃね?

89 名前:デフォルトの名無しさん :03/10/19 17:19
>>87
自己カプセル化フィールドだな。
C++だとインラインメソッドにできるから速度低下も無いし素晴らしいな。

90 名前:デフォルトの名無しさん :03/10/19 17:19
>>87
C++にそんなプログラミング流儀はありません。
C++の書籍でそんなコード見たことありません。

91 名前:デフォルトの名無しさん :03/10/19 17:20
>>86
見通しが悪くなるというか、妙な汗が出てくる。
なんか実装側にもトリッキーな仕掛けがあるんではなかろうかと。

92 名前:デフォルトの名無しさん :03/10/19 17:23
>>90
それはあなたが古い書籍しか読んでないからです

93 名前:デフォルトの名無しさん :03/10/19 17:24
>>87
ケントベックの Smalltalk ベストプラクティスパターン pp.99-103 も読んでね。
匙加減が大切。

94 名前:デフォルトの名無しさん :03/10/19 17:25
ISO/IEC 14882:2003 出てるみたいだけど、何が変わったのさ?

95 名前:デフォルトの名無しさん :03/10/19 17:25
角度とか

96 名前:デフォルトの名無しさん :03/10/19 17:26
ま た J a v a 厨 か

97 名前:デフォルトの名無しさん :03/10/19 17:26
>>77
うぉっ、できた、結構できるもんだな
こりゃ便利、使わせてもらうぜ、ありがとん

98 名前:デフォルトの名無しさん :03/10/19 17:27
つーかC++使える香具師ってJavaも使えるのが普通じゃないの?

99 名前:23 :03/10/19 17:28
>86
>勘違いする

そりゃ仕様確認しない方が悪いんじゃん?
まー大掛かりになるならドキュメント化は必要だね

100 名前:デフォルトの名無しさん :03/10/19 17:29
C++の本あんまりでないからなあ。
仕方なくJava系の設計本読んで脳内でMyNativeProgrammingLanguage C++に変換ですよ。

101 名前:23 :03/10/19 17:31
IDEの補完って、結局コピペと同じ事なんだよ
修正起きたら大変だろうよ
その辺わかってない奴大杉

102 名前:デフォルトの名無しさん :03/10/19 17:31
ドキュメントが必要なものよりドキュメントが必要ないもののほうがいい。
原則だろ。

103 名前:デフォルトの名無しさん :03/10/19 17:32
正直くどい…

104 名前:デフォルトの名無しさん :03/10/19 17:33
なるほど。
23の言いたいことがなんとなくわかった気がする。

105 名前:デフォルトの名無しさん :03/10/19 17:34
わかったからぼちぼち終わりにしてください。

106 名前:104 :03/10/19 17:34
とでも言わないと23はいつまでもこの話続けそうだからな…

107 名前:23 :03/10/19 17:37
>102
あのさ、
IDEの機能こそドキュメント化必須じゃん?

逆にマクロならその定義見りゃ良い話にならねえ?

108 名前:デフォルトの名無しさん :03/10/19 17:37
そうですね。

109 名前:デフォルトの名無しさん :03/10/19 17:38
はぁ。
それじゃ、また。

110 名前:デフォルトの名無しさん :03/10/19 17:38
なるほど。
23の言いたいことがなんとなくわかった気がする。


111 名前:デフォルトの名無しさん :03/10/19 17:38
>>23
お前友達いないだろ

112 名前:デフォルトの名無しさん :03/10/19 17:39
メタプログラミングの話ですか?

113 名前:デフォルトの名無しさん :03/10/19 17:39
だいぶ違います

114 名前:110 :03/10/19 17:40
と言っても話は続いてますが… >>104

115 名前:デフォルトの名無しさん :03/10/19 17:40
23の考えを究極的に進めたのがboost。

116 名前:デフォルトの名無しさん :03/10/19 17:41
方向性が違いそうですが

117 名前:デフォルトの名無しさん :03/10/19 17:42
祭りの会場はここですか?

118 名前:デフォルトの名無しさん :03/10/19 17:43
祭りとしてはイマイチだったな

119 名前:デフォルトの名無しさん :03/10/19 17:43
僕、今から用事あるんでこのへんで失礼します。

120 名前:デフォルトの名無しさん :03/10/19 17:45
メンバ関数内で勝手にメンバ変数の値が変わってしまう・・・。
式も無いのに何で勝手に変わるのかわけが分かりません。
なぜなんでしょうか?

121 名前:sage :03/10/19 17:46
超初心者の質問で申し訳ないですが

this->

の意味を教えて下さいませんか?


122 名前:デフォルトの名無しさん :03/10/19 17:47
意図せず期待しないメモリ領域に書き込みしている

123 名前:デフォルトの名無しさん :03/10/19 17:47
そういう時こそアクセサの出番ですがな。

124 名前:デフォルトの名無しさん :03/10/19 17:47
これ->空白

125 名前:デフォルトの名無しさん :03/10/19 17:49
>>111
友達ってなによ


126 名前:デフォルトの名無しさん :03/10/19 17:50
アツく語ってくれる>>23はどこにいったんだYO!
はやく戻ってきてくれ〜!

127 名前:デフォルトの名無しさん :03/10/19 17:51
>>121
名前がわり〜よ。

128 名前:デフォルトの名無しさん :03/10/19 17:51
意図しない事になる例。

class A
{
char name[4];
int age;
public:
 setName(char* s) { strcpy(name, s); }
 setAge(int d) { age = d; }
 A()
 {
  setAge(10);
  setName("あいうえ");
 } 
 ~A()
 {
  std::cout << name << "," << age << std::endl;
 }
}

129 名前:121 :03/10/19 17:57
>>124
いや、プログラム的な意味を教えてほしいのです。

>>127
すみません。sageはメール欄でした。

130 名前:デフォルトの名無しさん :03/10/19 17:59
>>126
お前、23氏をばかにしているの?
クラス内でマクロを使うなんて日常茶飯事じゃん
VC++しか使ってない奴は引っ込め。

131 名前:デフォルトの名無しさん :03/10/19 17:59
そうですね。

132 名前:デフォルトの名無しさん :03/10/19 18:01
>>129
クラスオブジェクトのポインター

133 名前:121 :03/10/19 18:07
>>129
ありがとうございます。うっすら分かってきたような...
this-> って省略されているんでしたっけ?
どこを調べても載ってない...

134 名前:120 :03/10/19 18:11
何で意図しないことが起こるのかわかりません

135 名前:デフォルトの名無しさん :03/10/19 18:12
>>133
笑った

136 名前:デフォルトの名無しさん :03/10/19 18:16
>>134
>128氏が答えの例をあげてます。
メンバー変数にどこかでコピーしてるから

137 名前:デフォルトの名無しさん :03/10/19 18:30
>>134
コード晒されないとわかりません

138 名前:デフォルトの名無しさん :03/10/19 18:31
>>134
"あいうえ"は何バイトかよく考えてみろ。

139 名前:デフォルトの名無しさん :03/10/19 18:37
9バイトだね

140 名前:デフォルトの名無しさん :03/10/19 18:59
17バイトだろ?

141 名前:デフォルトの名無しさん :03/10/19 19:01
>>140
全角文字1文字==4バイトってコード体系あったっけ?ハードウェアで
強制されたら仕方ないが。

142 名前:デフォルトの名無しさん :03/10/19 19:04
有名どころだとUTF32

143 名前:デフォルトの名無しさん :03/10/19 19:05
>>141
終端文字が1バイトで済んでいそうなことから、マルチバイトのエンコーディングと
思われるが謎だね(笑)
俗に言うJISだと 3 + 2*4 + 3 + 1 で15バイトとか
UTF-8だと3*4+1=13バイトとか
まあエンコーディングによっていろいろだが
5バイト以上なのは間違いなさそうなので、いずれにしろメモリ破壊は期待できるか。

144 名前:デフォルトの名無しさん :03/10/19 19:07
>>132
template 絡むと、それ以外の意味もあるけどな。

145 名前:デフォルトの名無しさん :03/10/19 20:32
C++では構造体もコンストラクタや関数を持つことができますが、
この場合sizeofを使うと、変数のみのサイズが返されますか?

146 名前:デフォルトの名無しさん :03/10/19 20:36
>>145
virtualな関数を含むと、そうではない。

147 名前:デフォルトの名無しさん :03/10/19 20:40
>>145
メモリイメージとsizeofに関して、structとclassはまったく同じ。
virtual関数があるかどうかで変化する。

148 名前:デフォルトの名無しさん :03/10/19 20:59
>>147
あと基底クラスを virtual 継承してる場合も、一般的にはポインタ一つ分サイズが増える。

149 名前:デフォルトの名無しさん :03/10/19 22:46
BCD値(0x123456)を普通の整数型に変換するルーチンやその逆はないでつか?

150 名前:デフォルトの名無しさん :03/10/19 22:49
>>149
C/C++の宿題をやらせて。おながい。13代目
http://pc2.2ch.net/test/read.cgi/tech/1064541405/l50


151 名前:デフォルトの名無しさん :03/10/20 00:07
>>145
やってみろよ、すっげー簡単な実験じゃねえか
んで、そのコンパイラがまあ普通なコード吐いてるかどうかは
ARMかLippmanあたりを読めば判断できる

ARM: ISBN4-901280-39-2
Lippman: ISBN4-8101-8101-4

152 名前:デフォルトの名無しさん :03/10/20 01:46
勉強のためにiostreamを派生させて
strstreamのようなものを作ってみたいのですが
参考になるページとかありませんでしょうか?


153 名前:デフォルトの名無しさん :03/10/20 01:49
>>152
勉強のためとか言っておきながら、参考になるページって・・・。
iostream読んでも見当つかないのなら、もっと自分の実力に見合った勉強をするべき。

154 名前:デフォルトの名無しさん :03/10/20 01:52
勉強をしているときは何一つ参考にしてはいけない。
これ基本。

155 名前:デフォルトの名無しさん :03/10/20 02:01
>>152
まず標準ライブラリのstrstreamの派生のさせ方を勉強して、
それを真似ると簡単。

C++標準ライブラリ、チュートリアル&リファレンスは標準C++
ライブラリを深く知りたい人の必携本。

156 名前:デフォルトの名無しさん :03/10/20 02:01
●●●マスコミの「盗聴、盗撮」は許されるのか?その8●●● http://natto.2ch.net/mass/kako/1011/10115/1011522150.html
387 名前: 文責:名無しさん 投稿日: 02/02/21 23:49 ID:FEi+B6dZ
作業服を着ていれば盗聴工事をしてもバレにくいですからね。
通行人が見ても普通の工事だと思うし。屋根のぼっててもわからないでしょう。屋根の修理かな?ってね。
排泄行為とか入浴を盗撮されると嫌だね。あれはどうかと思うよ。

732 名前: 投稿日: 02/03/12 19:46 ID:aN/JDfka
4月のドラマを2ちゃんのドラマ板でチェックしてみると、盗聴ドラマらしき番組
がいくつかある。野島某が脚本を書く「ゴールデン・ボール」は、怪しい。こいつ
が盗聴を利用して俺の書き込みを追跡しているのは、知っている。盗聴に頼らない
で発案するのが怖いのか、あるいは、ジンクス担ぎか。繰り返すが、電話/web
/メール盗聴で得た俺の個人情報をヒントにしておきながら、俺の人生観や趣味を
否定する内容であった場合には、番組をぼろくそに叩いてスタッフに呪いをかけま
すので、あしからず。ほとほどにしておけよ、日テレ。今年は、戦争モードだ。

157 名前:デフォルトの名無しさん :03/10/20 02:03
おっとっと。std::strstreamは古い標準化以前のストリームだね。
std::stringstreamを使いましょう。std::strstreamは次の標準化で
消えるかもしれないと言っている。

158 名前:デフォルトの名無しさん :03/10/20 02:09
マルチスレッドに適した開発環境とOS教えれ。

159 名前:デフォルトの名無しさん :03/10/20 02:12
>>158
MS-DOS 3.3c

160 名前:デフォルトの名無しさん :03/10/20 02:12
>>154
さすがに暴論

161 名前:デフォルトの名無しさん :03/10/20 02:26
>>153-154
勉強のためにしてるときでも
何か参考にするくらいはいいのでは?


162 名前:デフォルトの名無しさん :03/10/20 12:09
test

163 名前:デフォルトの名無しさん :03/10/20 15:56
>>158
CZAR

164 名前:デフォルトの名無しさん :03/10/21 10:33
普段windowsで開発しているのですが、RedHat向けにバイナリを配布したと
思っています。
RedHat9はインストールしてコンパイルできて正常に動作確認できました。
このバイナリはRedHat9でしか動かないということになるのでしょうか?
7,8でも動かしたいなら、7の環境でコンパイルすればイイ??
どなたか教えてください。

165 名前:デフォルトの名無しさん :03/10/21 10:35
>>164
Win以外はバイナリ配布いらんよ

166 名前:デフォルトの名無しさん :03/10/21 10:36
>>165
rpmは?

167 名前:デフォルトの名無しさん :03/10/21 10:41
rpmなんて環境依存だろうが

168 名前:デフォルトの名無しさん :03/10/21 10:49
src.rpmでいいよ

169 名前:デフォルトの名無しさん :03/10/21 10:50
-static付けてコンパイルすれば
大抵のバイナリーは大抵のLinux上で動くから
それでrpm作ればいい


170 名前:デフォルトの名無しさん :03/10/21 10:54
>>167
rpmくらいどこでも動くだろう
Red Hatの7,8,9だったら

171 名前:デフォルトの名無しさん :03/10/21 13:27
c++で、

void * subA( void * );

のような宣言は

void subA( void );

とどう違うのでしょうか

172 名前:デフォルトの名無しさん :03/10/21 13:29
void型のポインタ(void*)を返すか何も返さないか。

173 名前:デフォルトの名無しさん :03/10/21 13:30
>>172
void型のポインタってなんですか

174 名前:デフォルトの名無しさん :03/10/21 13:32
>>173
正直、入門書の一冊くらい読んでから質問してほしいが。

175 名前:ヽ(´ー`)ノ :03/10/21 13:32
>>173
void* が分からんレベルなら、ここで聞くより入門書書いたまえ。

176 名前:デフォルトの名無しさん :03/10/21 13:50
>>171
もしかしてY大学の今日〆切の課題をやってますか?
自分もそうです(笑

お互い頑張りましょう〜

177 名前:デフォルトの名無しさん :03/10/21 13:53
代々木アニメーション大学?

178 名前:デフォルトの名無しさん :03/10/21 13:56
voidポインタとか引数にvoidとか、C++っていうよりC言語の話題だな

179 名前:   :03/10/21 13:57
voidの単語の意味を調べるのがさきじゃないか?


180 名前:デフォルトの名無しさん :03/10/21 13:58
ということにしたいのですね

181 名前:デフォルトの名無しさん :03/10/21 14:08
>>179
void の意味調べても void* はよく分からない気がするんだが。
素直に入門書買わせた方が。

182 名前:デフォルトの名無しさん :03/10/21 15:13
>>173
なんでもポインター。

183 名前:デフォルトの名無しさん :03/10/21 15:14
ドラえもん?

184 名前:デフォルトの名無しさん :03/10/21 15:47
C言語習いたてのころにvoidとvoid*の違いに戸惑うよな。
両者には大した関係もないということで。

185 名前:デフォルトの名無しさん :03/10/21 15:49
>>104
 形無しポインタつーいみではvoid*でいいんでない?


186 名前:デフォルトの名無しさん :03/10/21 17:45
>>171
>void * subA( void * );
引数にどんな型のポインターでも渡せる。そして、どんな型にでも変換できるポインターを返す。
>void subA( void );
引数は受け取らないし値も返さない。
そして、これらの関数が同じスコープに存在したらそれらの関数の事をオーバーロード関数という。


187 名前:デフォルトの名無しさん :03/10/21 18:09
#define EMPTY_ARG void
#define ANY_POINTER void*
#define NO_RETURN_VALUE void

NO_RETURN_VALUE FunctionA (EMPTY_ARG);
NO_RETURN_VALUE FunctionB (ANY_POINTER);
ANY_POINTER FunctionC (EMPTY_ARG);
ANY_POINTER FunctionD (ANY_POINTER);

こうやって書いてみると「あーなるほど」と思う?
同じ void でも状況によっていろんな意味があるってことなんだがな


188 名前:デフォルトの名無しさん :03/10/21 20:06
>>186
一応C++スレなので
void *はどんな型からも暗黙変換できるが、
どんな他の型にも暗黙変換でき「ない」ポインタ、だな。

189 名前:デフォルトの名無しさん :03/10/21 20:08
>>188
>>186は「暗黙」とは言ってないぞ。

190 名前:デフォルトの名無しさん :03/10/21 20:09
void
static
extern
*
&
・・・同じ単語/記号に複数の意味を持たせる流儀は何か技術的な理由があったのだろうか?

191 名前:デフォルトの名無しさん :03/10/21 20:12
暗黙でなければどんなポインタからどんなポインタでも変換できるけどな

192 名前:デフォルトの名無しさん :03/10/21 20:17
>>190
新しいキーワード考えるのが面倒だったんじゃない?
あんまりいい風習じゃないのよなぁ。

193 名前:デフォルトの名無しさん :03/10/21 20:18
文字列を入力として受け付けて、その文字列中に含まれる数字の合 値を求めてみてください。
例: a1b23g4 と入力された場合、1+2+3+4 で10 を出力してみせてください。


194 名前:デフォルトの名無しさん :03/10/21 20:22
>>193
コードを書けとは言ってないようなので、人力でやれということか。
スレ違いだな。(笑)

195 名前:デフォルトの名無しさん :03/10/21 20:35
復改を表現するのに、バックスラッシュ記号をキーボードで打ち込もう
と思うのですけれど¥マークがでてきてしまいます。
バックスラッシュ記号を表示するにはどうしたらいいのでしょうか。

196 名前:デフォルトの名無しさん :03/10/21 20:39
>>195
フォントを変える。

197 名前:デフォルトの名無しさん :03/10/21 20:41
>>194
すいません。コードおねがいします。


198 名前:デフォルトの名無しさん :03/10/21 20:44
おいおいC++スレだからCで答えられるような問題出すなよ。
それとも回答者が思いきりSTLとかboostとか自作のクラスを
使って答えるとか。

199 名前:デフォルトの名無しさん :03/10/21 20:57
istream_iteratorとC++ localeの演習では無かろうか。

200 名前:デフォルトの名無しさん :03/10/21 21:08
だってマルチだし

201 名前:デフォルトの名無しさん :03/10/21 22:10
>>190
.
->
::
などガイキチとまで言うガイキチが後を絶たないが
そういうのは放置として、お主はどう思う?

漏れは根底にある思想には反対したくないが
結果はイクナイと思っている

202 名前:デフォルトの名無しさん :03/10/21 22:14
>>193
それくらいならperl使え


203 名前:デフォルトの名無しさん :03/10/21 22:16
>>201
結果がいくないというのは
具体的にどういうモノであれば
良かったということなのか?


204 名前:デフォルトの名無しさん :03/10/21 22:21
RS232Cでデータの送受信をしようとして
フレーミングエラー等をClearCommErrorで
dwErrorsに入るエラーフラグでチェックできると思い
使ってたんですがOSがXPのときはうまくいっている?様だったのですが
Win98上で動かした場合常にdwErrorsにフラグが立っているようで
うまくいきません
RS232Cでの通信エラーのチェックはどうやったら良いのでしょうか?

205 名前:デフォルトの名無しさん :03/10/21 22:40
->と::は正直イラネーと思う

206 名前:デフォルトの名無しさん :03/10/21 22:58
>>204
先ずはスレ違いということに気づけ。

207 名前:デフォルトの名無しさん :03/10/21 23:32
>>203
もっと、ポインタとスコープをきちんと理解させる教育運動をすべきだった
過度の放任が招いた今のくるくるパーばっかりの大豊作にあきれ果てている

208 名前:デフォルトの名無しさん :03/10/21 23:34
その一端に、配列をポインタと同一視させる過度の偽装がある

209 名前:デフォルトの名無しさん :03/10/21 23:35
意味わかんない

210 名前:デフォルトの名無しさん :03/10/21 23:37
同一視してないじゃん
int a[20];
int *b;

b++;
a++; //error

211 名前:デフォルトの名無しさん :03/10/22 01:03
教育現場の問題と言語仕様の問題をごちゃまぜにする奴がいなければ
あとはどうでもいい

212 名前:デフォルトの名無しさん :03/10/22 01:07
>>208
まずはその偽装が仕様書のどこに記述されているのか
説明してごらんあれ


213 名前:デフォルトの名無しさん :03/10/22 01:10
つーかそういう時代遅れの話はCスレでどうぞ

214 名前:デフォルトの名無しさん :03/10/22 01:15
しかし、今どきCスレなんかに行ってもなあ

時代遅れな連中ばかりがウヨウヨして
ガセネタばかりで盛り上がってる現状を見ると
あそこはあそこで隔離スレとしての役目を果たすのに
精いっぱいではなかろうか?


215 名前:デフォルトの名無しさん :03/10/22 02:51
>ガセネタばかりで盛り上がってる現状を見ると
ワラタ

216 名前:デフォルトの名無しさん :03/10/22 02:52
>>214
C++の常識をCスレに書き込んで突っ込まれた人ですか。
ここに愚痴を書くのはやめてね。

217 名前:主婦(33歳) :03/10/22 03:32
C++オタがDelphiスレでウザイのですが、どうしたらいいのでしょう?

218 名前:デフォルトの名無しさん :03/10/22 03:53
主婦なら主婦の仕事ちゃんとやってから質問しろ。

219 名前:デフォルトの名無しさん :03/10/22 05:00
>>218
他の仕事の奴には言わないのに主婦だけ言うのなw

220 名前:デフォルトの名無しさん :03/10/22 08:15
日本の景気が悪いのは主婦がC++の勉強をしないからだ

221 名前:デフォルトの名無しさん :03/10/22 11:55
ゲーム用のキャラクタクラスで、今までこういう感じのつくりにしてました。

class Character
{
public
  // ↓実際はもっといっぱい列挙してます。各種状態異常のフラグとか、装備とか。
  enum PARAM{
    LEVEL,EXP,HP,MP,MHP,MMP,STR,INT,VIT,AGI,DEX,LUK,
    END};
  void SetParam(int i,int n){ param_[i] = n;}
  void AddParam(int i,int n){ param_[i] += n;}
  void SubParam(int i,int n){ param_[i] -= n;}
  int GetParam(int i){ return param_[i];}
  static int StatusBegin(void){return STR;}
  static int StatusEnd(void){return END;}
private:
  int param_[END];
}

全能力値に+10とか言う場合、
for (int i=Character::StatusBegin();i<Character::StatusEnd();++i){
  character_.AddParam(i,10);
}
という感じでかけて、製作過程でパラメータ数が変動しても
enumさえ変えればオッケーなので激しく楽……だと思ってたのですが、
デバッグのときにparam_[10]とかで確認せねばならず、すごく不便だと気づきました。
最初っからメンバ変数をint level_,exp_...;としておけばデバッグの時は
楽なんですけど、そうするとforでまわせなくて不便なのです……。
うまい解決策はないでしょうか?


222 名前:デフォルトの名無しさん :03/10/22 12:00
電卓の機能を模倣するプログラムを作成しなさい。
わかりません‥
どなたか教えていただきませんでしょうか‥


223 名前:デフォルトの名無しさん :03/10/22 12:38
>>221
ステータスの変数を全てparamの配列にしてるのがそもそも間違い。
ちゃんと別々の変数にして、全能力値に+10とかやる場合は1つ1つ書いていく。
それからアイテムや魔法の効果は別のスクリプト書いてやるべき。
ハードコーディングは実験の時以外はやめた方がいい。

224 名前:デフォルトの名無しさん :03/10/22 12:42
ああ、変数を別々にやる方法もやってたのか。
forで回せないなんて言ってるけど、高々10個程度の変数なら
そこにforを使ったぐらいでソースが短くなったりきれいになることはないからやめな。

225 名前:デフォルトの名無しさん :03/10/22 13:28
>>221
デフォルトコンストラクタのデフォルト引数でも利用して最初に初期化。

226 名前:221 :03/10/22 13:45
>>223-225
ありがとうございます。邪道ではありますけど、とりあえずの対処策を思いつけました。

class Character
{
public
  // ↓実際はもっといっぱい列挙してます。各種状態異常のフラグとか、装備とか。
  enum PARAM{
    LEVEL,EXP,HP,MP,MHP,MMP,STR,INT,VIT,AGI,DEX,LUK,
    END};
  void SetParam(int i,int n){ reinterpret_cast<int*>(this)[i] = n;}
  void AddParam(int i,int n){ reinterpret_cast<int*>(this)[i] += n;}
  void SubParam(int i,int n){ reinterpret_cast<int*>(this)[i] -= n;}
  int GetParam(int i){ return reinterpret_cast<int*>(this)[i];}
  static int StatusBegin(void){return STR;}
  static int StatusEnd(void){return END;}
private:
  int level_,exp_,hp_,mp_,mhp_,mmp_,str_,int_,vit_,agi_,dex_,luk_;
}

csvデータからバイナリデータに変換するツールでもこのヘッダを利用しますので、
enumを切るわけには行かなかったので、こうなりました。
無理やり感が漂ってますけど、ファイルからデータ読み込みしてみて
正常に動きましたので、とりあえずこれで行ってみようと思います。
(今はとにかく動かすのが優先な時期なので)

227 名前:デフォルトの名無しさん :03/10/22 14:01
ちょっと怖いかも
内部union持たせた方が

228 名前:221 :03/10/22 14:13
>>227
最初にunionでどうにかならないかと検討してたんですが、
配列のサイズをenum値で決定するところで詰まってしまったんです;;
うまくいく方法ってあります?

229 名前:デフォルトの名無しさん :03/10/22 14:15
>>228
マジレスしていいか?
配列にするメリット、全然なし。やめろ。

230 名前:デフォルトの名無しさん :03/10/22 14:43
class Character
{
  //...
private:
  union PARAM0{
    int RowParam[END];
    struct PARAM1 {
      int level_,exp_,hp_,mp_,mhp_,mmp_,str_,int_,vit_,agi_,dex_,luk_;
    } param;
  } param;
  struct PARAM2{
    int level_,exp_,hp_,mp_,mhp_,mmp_,str_,int_,vit_,agi_,dex_,luk_;
    int & operator[](int index){return *(reinterpret_cast<int *>(this)+index);
    int operator[](int index)const {return *(reinterpret_cast<int *>(this)+index);
  } param2;
  //ここからは気にしない方がいいと思う。
  typedef std::map<std::string,int> ContType;
  static ContType str2idobj;
  static void Init(){
    str2idobj["LEVEL"]=LEVEL;str2idobj["EXP"]=EXP;str2idobj["HP"]=HP;str2idobj["MP"]=MP;
    str2idobj["MHP"]=MHP;str2idobj["STR"]=HP;str2idobj["INT"]=MP;str2idobj["VIT"]=VIT;
    str2idobj["AGI"]=AGI;str2idobj["DEX"]=DEX;str2idobj["LUK"]=LUK;
  }
public:
  static int name2Id(const std::string & arg){
    ContType::iterator p=str2idobj.find(arg);
    if(p!=str2idobj.end()){return p->second;}
    assert(0);
  }
};


231 名前:デフォルトの名無しさん :03/10/22 14:48
ところで >>221 よ、

"オブジェクト指向"

って言葉、理解しているか?

232 名前:デフォルトの名無しさん :03/10/22 14:51
「理解しているか?」って質問もたいがい無意味だよな。
余計なターン消費しないでとっとと言いたいこと言え。

233 名前:デフォルトの名無しさん :03/10/22 15:23
>>229
はい。ですから最終的には配列は消す予定です。今ほしいのは
とりあえずの急場をしのげる妥協案なので、配列のみバージョンとの
互換性を重視してます。

>>230
unionの記述方法、参考にさせていただきます。
あと、operator[]でリファレンス返せばいいんでしたね。そんなテクあったの忘れてました^^;
name2Idのほうは、csvからのデータ変換といっても、残念ながら"LEVEL"とかいう
文字列が入ってくるわけじゃないんです。
カンマ区切りの数字がどえーっと並んでて、このうち2列目〜5列目が能力値だから
数字の範囲は1-999,6列目〜10列目が状態異常フラグだから数字の範囲は0-1、
というようなときに、この2,5,6,10の代わりにヘッダのenum値を利用したい、という
ことなのです。この値が、わりと不定なので。
最終的にはこのenum値を利用しようとするのはあきらめることになりそうですけど。

>>231
厳密に議論しようとすると時間の無駄になる、とっても危険な単語である、
という程度までは理解できています。
とりあえず、なにがお気に触ったのかだけ教えてもらえればありがたいです。

234 名前:デフォルトの名無しさん :03/10/22 15:59
>>232
今回も見事にあてはまりましたな

235 名前:デフォルトの名無しさん :03/10/22 16:19
ふつうは素直にメンバ変数にしてアクセサをしこしこ書いて、
コンストラクタで設定してやればいいわな。
ファイルの書き出しメソッドも用意しとけば、呼び出し側で
ループする必要もないし。
なにより、仕様変更が起こって、パラメータの数や順序が
変わっても、メンバ変数とアクセサの追加、および書き出し
メソッドに少し手を加えるだけでいい。
データがどのように保持されているか考えなくて良い、という
のがオブジェクト指向の「情報隠蔽」のメリットなのだから、
仕様変更の度にパラメータとenumの値の対応を気にしている
現状は、とても、「オブジェクト指向」のメリットを利用して
いるとは、言えんわな。二次元配列にclassの皮がついているだけ。

236 名前:デフォルトの名無しさん :03/10/22 16:53
うわあなんだこりゃ。
>>229
激しく同意

237 名前:デフォルトの名無しさん :03/10/22 17:14
VS 2003 のC++のdynamic_castって正常に動作する?
ポインタ引数であっても(リファレンス引数じゃなくても)変換に失敗したとき例外を投げて、
Debug Errorメセージが出てストップしてしまう。

238 名前:デフォルトの名無しさん :03/10/22 17:41
>>237
プロジェクトオプションの実行時型情報がデフォルトでオフだよ。
オンにしないと使えない

239 名前:デフォルトの名無しさん :03/10/22 17:43
#include "stdafx.h"
#include <cstdio>
class A{
public:
A(){}
virtual int func(){ return 1; }
};
class B{
public:
B(){}
virtual int funcb(){ return 2;};
};
class C: public A, public B{
public:
C(){}
int func(){ return 3;};
};
int _tmain(int argc, _TCHAR* argv[])
{
C *CC = new C;
A *AA= CC;
B *BB;
fprintf(stderr, "%X\n", BB = dynamic_cast< B *>(AA));
return 0;
}
gcc ではちゃんとキャストできた。VC++ 7.01だとランタイムエラーで落ちる。

240 名前:デフォルトの名無しさん :03/10/22 17:44
>>238
ありがとmOm

241 名前:デフォルトの名無しさん :03/10/22 18:06
A.copy( B )というメンバ関数があった場合
一般にBの内容をAにコピーするのでしょうか、それとも逆でしょうか。

242 名前:デフォルトの名無しさん :03/10/22 18:40
>>241
そこで迷うなら
そのような名前のメンバーは存在してはいけない
と思え

243 名前:231 :03/10/22 18:43
>>233
>とりあえず、なにがお気に触ったのかだけ教えてもらえればありがたいです。

いや、別に藻前が悪いわけじゃない。
場数を踏めばそのうちにスタイルも変わってくるだろうし。
(ちなみに気に「サワル」のは「触る」ではなく「障る」だ。)

ただ、たとえばさ、今でも結構いるけど "VIP" と称して
10年以上前のセルシオやシーマをいじり倒して、
ローダウンさせたりゴテゴテ派手な部品を取り付けたりしている車が
あるけど、藻前、あれらを見てどう思う?

漏れはこのコードを見たとき、なんとなくああいう車を見せられた時
のような感じを受けただけの事。
年寄りの繰言だと思って聞き流してくれ。

244 名前:デフォルトの名無しさん :03/10/22 18:47
>>226
「実際はもっといっぱい列挙」の部分に数十個列挙していて
その数に目を奪われがちかもしれないが
将来的にそれが数倍に増えても問題ないような構造を考えてこそ
スケーラビリティのあるプログラム

245 名前:デフォルトの名無しさん :03/10/22 18:47
>>242
サンクス

246 名前:221 :03/10/22 20:32
もうひっこむつもりだったのですが、気になったので確認させてください。

メンバ変数をたくさん取る代わりに配列で一括で用意したのは、
すべて型はintで済むという前提があるからです。
(突き詰めればフラグ関係はboolがいいんでしょうけど)

メンバ変数でそれぞれを用意すると、ヘッダでのメンバ変数の宣言順と
コンストラクタでの初期化順と書き出しメソッドでの出力順を対応させなければ
ならないという手間が発生します。
ですが、配列だと、初期化と出力はfor文で前からまわせばいいので、その手間は
発生しません。

さらにいま思いついたのですが、アクセサもtemplateを利用して、

template<int i> void SetParam(int n){ param_[i] = n;}

で汎用的なsetterにして、特殊なやつだけは

// 0以下をセットされても無視する。
template<> void SetParam<LEVEL>(int n){ if (n <= 0) return; param_[LEVEL];}

こうすれば、特殊化も容易です。アクセサをメンバ変数ぶんだけそろえることに比べたら、
圧倒的に少ない記述量になるはずです。

コンパイラが配列とenumの対応を認識できないという致命的な欠点を除けば、
この配列方式は十分なメリットがあるように思えるというか……思えたのですが。

結局のところ、若気の至りなんでしょうか……?

     / ユメヤブレテサンガリア!
|自宅| λ......

247 名前:デフォルトの名無しさん :03/10/22 21:06
そもそも外から自由にSetParam出来る事自体おかしい。
外から自由にSetParamできるという事はそのCharacterに対する敵に対して、
俺のHPなんかどうでもいいから好きに弄ってくれと言っているような物だ。

248 名前:デフォルトの名無しさん :03/10/22 21:13
配列の各要素にエイリアスを用意して、
int a[2];
int *hp = &a[0];
int *mp = &a[1];

a[0] = 33;
*mp = 42;
どっちでもいけるっぽく。

249 名前:デフォルトの名無しさん :03/10/22 21:14
>>247
こいつの事だからどうせ特殊化してコンパイルエラーしろとか言い出すんだろ。
template<> void SetParam<HP>(int n);

250 名前:デフォルトの名無しさん :03/10/22 21:30
>メンバ変数でそれぞれを用意すると、ヘッダでのメンバ変数の宣言順と
>コンストラクタでの初期化順と書き出しメソッドでの出力順を対応させなければ
>ならないという手間が発生します。
そんなわけない。



■過去ログ置き場に戻る■ 1- 次250 最新50
DAT2HTML 0.33f Converted.