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


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

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

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

2 名前:v(^・^)v :03/11/30 12: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/
 24 http://pc2.2ch.net/test/read.cgi/tech/1066546387/
 25 http://pc2.2ch.net/test/read.cgi/tech/1067949669/

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

[禿 Stroustrup]
 http://www.research.att.com/~bs/
[C++ International Standard]
 http://www.kuzbass.ru/docs/isocpp/
 http://www.kuzbass.ru/docs/ansi_iso_iec_14882_1998.pdf
 http://www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=38110&ICS1=35&ICS2=60&ICS3=
[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/ (日本語)

4 名前:v(^・^)v :03/11/30 12: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/

5 名前:v(^・^)v :03/11/30 12:56
■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

6 名前:v(^・^)v :03/11/30 12:57
■関連スレ■
[C++】template 統合スレ]
 http://pc2.2ch.net/test/read.cgi/tech/1066493064/l50
[C/C++の宿題をやって。おながい。]
 http://pc2.2ch.net/test/read.cgi/tech/1067175933/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/1061594556/l50
[タダで使えるBorland C++]
 http://pc2.2ch.net/test/read.cgi/tech/1054390397/l50
[Borland C++ BuilderX]
 http://pc2.2ch.net/test/read.cgi/tech/1065260556/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

7 名前:デフォルトの名無しさん :03/11/30 13:02
ラッキー7

8 名前:デフォルトの名無しさん :03/11/30 13:05
末広がりの八

9 名前:デフォルトの名無しさん :03/11/30 13:07
>>1
  _、_
( ,_ノ` )y━・~~~ グッジョブ!

10 名前:デフォルトの名無しさん :03/11/30 13:22
配列オブジェクトの動的確保を、引数つきのコンストラクタで
初期化しながらやりたいんですけど、どうしたらいいでしょうか?
例えば
double *a = new double[p](int x, inty)
とかだとダメのようなのですが、どう書けばできますでしょうか?


11 名前:デフォルトの名無しさん :03/11/30 13:24
>>10
無理

12 名前:デフォルトの名無しさん :03/11/30 13:42
std::vectorなら条件付で可能だが。

13 名前:デフォルトの名無しさん :03/11/30 14:06
「STLでコードサイズが10倍」云々のコピペは
今回は無しか

14 名前:デフォルトの名無しさん :03/11/30 14:06
returnで値を返すところで、エラーがでてしまうのだけど、
どうして?

15 名前:デフォルトの名無しさん :03/11/30 14:07
getline()ってグローバル関数版もあるの?
仕様もistreamクラスのメンバ関数とかなり違うみたいですが
できればリターン値とか引数の仕様とか教えてくらはい
一応具具ったんですがわからなったので

16 名前:デフォルトの名無しさん :03/11/30 14:14
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vcstdlib/html/vclrf_string_getline_class.asp

17 名前:デフォルトの名無しさん :03/11/30 14:18
istream& getline(istream&,string&,char);
もっとぐぐれ

18 名前:デフォルトの名無しさん :03/11/30 14:24
さすが2chッ!俺が分からないことを即レスで返してくれるッ!
そこにシビれるッ!憧れるぅぅぅッ!

19 名前:デフォルトの名無しさん :03/11/30 14:46
こんなエラーが出てプログラムが強制終了されてしまうのですが、
何が原因なのでしょうか?
ある関数を出たときにこうなってしまうのですが・・・。

'ntdll.dll' をロードしました、合致するシンボル情報は見つかりませんでした。
'C:\WINDOWS\system32\kernel32.dll' をロードしました、合致するシンボル情報は見つかりませんでした。
'C:\WINDOWS\system32\user32.dll' をロードしました、合致するシンボル情報は見つかりませんでした。
'C:\WINDOWS\system32\gdi32.dll' をロードしました、合致するシンボル情報は見つかりませんでした。
\system32\shell32.dll' をロードしました、合致するシンボル情報は見つかりませんでした。
'C:\WINDOWS\system32\SHLWAPI.DLL' をロードしました、合致するシンボル情報は見つかりませんでした。
'C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.10.0_x-ww_f7fb5805\comctl32.dll' をロードしました、合致するシンボル情報は見つかりませんでした。
'C:\WINDOWS\ime\IMJP8_1\DICTS\imjpcd.dic' をロードしました、合致するシンボル情報は見つかりませんでした。
'C:\WINDOWS\system32\oleaut32.dll' をロードしました、合致するシンボル情報は見つかりませんでした。
スレッド 0xC64 終了、終了コード 3 (0x3)。

20 名前:r :03/11/30 14:55
class Base {
};

class Ext : public Base {
};

なとき、

void Copy( Base* targ, Base* src ) {
*targ = *src;
}

とかやると、
Ext e1, e2;
Copy( &e1, &e2 );
の呼び出しでBaseのoperator=が呼ばれてしまって、
期待通りのコピーができなかったりします。

みんなはどうやって解決してる?r

21 名前:デフォルトの名無しさん :03/11/30 15:16
>>20
void Copy( Ext* targ, Ext* src ) {
*targ = *src;
}


22 名前:デフォルトの名無しさん :03/11/30 15:21
>>20
おまいさんがやりたいのは本当にコピーなのか?
Copy() に Base* で渡している時点でオブジェクトの実際の型は不明になっている。
*targ, *src のそれぞれが Base あるいは Ext の可能性があるが、この 4 通りでどういう処理が発生すれば
期待通りなんだ?

で、オブジェクトの複製が欲しいだけなら、Base に
virtual Base* clone(void);
を定義すればいいと思う。

23 名前:デフォルトの名無しさん :03/11/30 15:48
template<class T>
void Copy( Base* targ, Base* src ) {
  static_cast<T>(*targ) = static_cast<T>(*src);
}

Copy<Ext>( &e1, &e2 );


24 名前:デフォルトの名無しさん :03/11/30 17:47
STLつかうと一気に実行ファイルサイズが10倍に?!

25 名前:デフォルトの名無しさん :03/11/30 17:56
はぁ、またか。

26 名前:デフォルトの名無しさん :03/11/30 17:59
処理にかかる時間も10倍になります

27 名前:デフォルトの名無しさん :03/11/30 18:04
はい、次

28 名前:デフォルトの名無しさん :03/11/30 18:10
>>24
ダイナミックリンクも白根ーのか知障

29 名前:デフォルトの名無しさん :03/11/30 18:13
>>28
煽られると放っておけない人情味のある方ですね

30 名前:デフォルトの名無しさん :03/11/30 18:15
ソースの読みづらさも10倍になります

31 名前:デフォルトの名無しさん :03/11/30 18:37
>>24
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない。

32 名前:デフォルトの名無しさん :03/11/30 19:08
>>31
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。

33 名前:13 :03/11/30 19:16
俺が呼んだのか? この場合・・・。

34 名前:デフォルトの名無しさん :03/11/30 19:23
とりあえず?!じゃなくて!?じゃないのとかね…

35 名前:デフォルトの名無しさん :03/11/30 21:06
>>32
きっとインポートテーブルのサイズなんか考えたこともないし
もしかして存在すら知らないんだろうな (プププ

36 名前:デフォルトの名無しさん :03/11/30 21:10
>>33
粘着召喚士ですか?

37 名前:デフォルトの名無しさん :03/11/30 21:49
ねぇねぇ。みんなコピペってコレクションしてるの?
それとも毎回探してくるの?

38 名前:デフォルトの名無しさん :03/11/30 21:58
>>37
新スレが立つと「コピペ辞書」から適当なモノを自動で書き込む
スクリプトを走らせてますが、何か?

39 名前:デフォルトの名無しさん :03/11/30 22:25
2

40 名前:デフォルトの名無しさん :03/11/30 22:37
STLつかうと一気に能率が10倍に?!

41 名前:デフォルトの名無しさん :03/11/30 22:51
STLつかうと一気に辛さが10倍に?!

42 名前:デフォルトの名無しさん :03/11/30 23:36
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?

43 名前:デフォルトの名無しさん :03/11/30 23:39
.pch ファイル削除してリコンパイル

44 名前:デフォルトの名無しさん :03/11/30 23:39
(☉◇☉)

45 名前:デフォルトの名無しさん :03/12/01 00:12
(☉◇☉)

46 名前:デフォルトの名無しさん :03/12/01 00:37
やっぱり、C++でprintfやsprintfを使うのは邪道なんですかね?
でも、coutを使うのはしんどいんだよな…

47 名前:デフォルトの名無しさん :03/12/01 00:40
>>46 さぁ?

48 名前:デフォルトの名無しさん :03/12/01 02:48
>>46
なれればcoutも捨てたもんじゃないぞ

49 名前:デフォルトの名無しさん :03/12/01 04:17
>>42
#include <stdafx.h>

後死ね。

50 名前:デフォルトの名無しさん :03/12/01 04:29
>>49
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。

51 名前:デフォルトの名無しさん :03/12/01 07:58
>>46
boost::format

52 名前:デフォルトの名無しさん :03/12/01 08:22
質問です。
Foo( 型 )
{
CBase* myc = dynamic_cast <CBase*> (new 型);



}
こういう感じで型を引数にする方法を調べてます。

template<typename T> Foo (T in)
{
CBase* myc = dynamic_cast <CBase*> (new T);



}
こんな感じでできそうですが、これだと引数に渡すためにTのインスタンスを
作成しないといけなさそうなんで、もっとスマートな方法があったら教えてください。

53 名前:デフォルトの名無しさん :03/12/01 08:47
何をしたいのか解らない。
とにかくC"Base"にdynamic_castって何?

template<typename T> Foo (T *in)

54 名前:デフォルトの名無しさん :03/12/01 08:50
インスタンス無しで呼びたいなら、
template<typename T> Foo();
こうだろ。

55 名前: ◆niIReSAISE :03/12/01 08:56
int a ;

56 名前:53 :03/12/01 09:07
確かにテンプレート引数を省略しなければいいのか。
無理矢理コンパイラに選択させようとしていた。
foo(static_cast<Class *>(0));

57 名前:52 :03/12/01 09:09
53,54さんありがとうございました。解決しました

58 名前:デフォルトの名無しさん :03/12/01 09:26
多相型オブジェでCBaseは変だよ

59 名前:デフォルトの名無しさん :03/12/01 10:11
>CBase* myc = dynamic_cast <CBase*> (new T);
TがCBaseと継承関係に無い場合リークするぞ。
それとも例え?


60 名前:デフォルトの名無しさん :03/12/01 10:46
その前にエラー

61 名前:デフォルトの名無しさん :03/12/01 11:32
Variant型の変数の作り方を教えて。

62 名前:デフォルトの名無しさん :03/12/01 11:57
マクロって何すか???

63 名前:デフォルトの名無しさん :03/12/01 12:46
>>61
Variant 変数名;

こんな基本的なことも知らんでどうする。

>>62
C入門書嫁。

64 名前:デフォルトの名無しさん :03/12/01 13:39
>>63
Variant型の定義の仕方を教えてください。

65 名前:デフォルトの名無しさん :03/12/01 16:34
class Cls2;

class Cls1 {
public:
friend void Cls2::func();
}
----------------------------------
class Cls2 {
public:
void func(){return;};
}

というように、friendを使いたいのですが、
compileするとCls2::func()が定義されてないよーと怒られます。
ただし、-----------のところで、二つのfileの分割しています。

どのように書けば良いのでしょうか。

66 名前:デフォルトの名無しさん :03/12/01 16:35
>>65
------------------より下をインクルードすればいいんじゃないか?

67 名前:65 :03/12/01 16:52
書き忘れましたが、
下のfileでは上のfileを既にincludeしています。

68 名前:デフォルトの名無しさん :03/12/01 18:20
そりゃだめだろうね。
friend void Cls2::func();からfriend class Cls2;だといいんだが

69 名前:デフォルトの名無しさん :03/12/01 18:58
下のファイルで上のファイルを
インクルードしないで済むようにするとか。

70 名前:デフォルトの名無しさん :03/12/01 20:49
C++でJavaのinterfaceみたいなことやるには純粋仮想関数じゃなくて仮想関数にしなきゃだめなんですか?
むしろC++,Java,抽象クラス,インターフェースについてまとめてください、おねがい

71 名前:デフォルトの名無しさん :03/12/01 22:06
>>70
いや不純仮想関数は禁じられたゼットォォォだぞ

72 名前:デフォルトの名無しさん :03/12/01 22:07
g++3.3を使っています。
class hogehoge があったとして std::vector<hogehoge> を

for(std::vector<hogehoge>::iterator it=v.begin();
it!=v.end();it++){

hogehoge* h=it;

}

のように代入するとしかられます。どのようにすべきなんでしょうか?

73 名前:デフォルトの名無しさん :03/12/01 22:23
>>72
hogehoge* h = &*it;

74 名前:デフォルトの名無しさん :03/12/02 16:00
>>72
なぜイテレーターをわざわざポインターにするの?

75 名前:デフォルトの名無しさん :03/12/02 16:17
>>74
そりゃ当然便利なイテレータの性質をはぎ取って不便なポインタにしたい
からでしょう。>>72はマゾ。

76 名前:72 :03/12/02 16:39
>>75
マゾではないなあ。
hogehoge* を引数とする関数があるからだけど、他に良い方法があるのでしょうか?

77 名前:デフォルトの名無しさん :03/12/02 17:32
ない

78 名前:デフォルトの名無しさん :03/12/02 19:01
72はマゾではないかもしれないが、ここの住人はあえて教えないサドばかりだ。

79 名前:デフォルトの名無しさん :03/12/02 19:20
>>76
で、イテレータも必要なのか?
本当はイテレータなんていらないんだけど、参考書丸写しで>>72のfor文使ってるだけってことない?
vectorはCライクな配列としてアクセスできるって知ってるよね?
以上を踏まえて、それでもってのなら>>73は定石だから覚えておいて損はないよ。

80 名前:デフォルトの名無しさん :03/12/02 20:05
vectorの各要素に対する処理をforで記述するときは
何も考えず>>72のように書くのもひとつの方法ではないだろうか。

81 名前:デフォルトの名無しさん :03/12/02 20:15
目覚めてないというか自覚のないマゾの見つけ方
軽〜く髪を引っ張ってみる
明確な判定基準はないがそれなりの反応を確認できる

82 名前:デフォルトの名無しさん :03/12/02 20:36
public class Sub extends Super implements InterFace

をC++で記述するとどうなりますか? Mixinとの多重継承になりますか?



83 名前:デフォルトの名無しさん :03/12/02 20:39
C++で文字列解析するのって、みなさんどうしてますか?
print "Hello,World!"
を「print」「"」「Hello,World」「"」に分解したいんですが。

84 名前:デフォルトの名無しさん :03/12/02 20:43
boost::lex

85 名前:デフォルトの名無しさん :03/12/02 21:22
質問いいですか?
int *i;
delete [] i;
みたいにまだnewで領域が割り当てられていないときにdeleteしたら
どうなりますか?
メモリが割り当てられているかどうか判別するにはどうしたらよいですか?

86 名前:デフォルトの名無しさん :03/12/02 21:26
>>85
> みたいにまだnewで領域が割り当てられていないときにdeleteしたら
> どうなりますか?
大抵の環境で落ちると思う。

> メモリが割り当てられているかどうか判別するにはどうしたらよいですか?
とりあえず、割り当て前は NULL で初期化しておく。

87 名前:85 :03/12/02 21:31
>>86
レスありがとうございます。
int *i;
i=NULL;
ですか?あとでif(i)で確認すればよいのですね。
int *i;を宣言したとき、iは最初からNULLではないのですか?

88 名前:デフォルトの名無しさん :03/12/02 21:37
>>87
ISO の規格を見てちと補足。
new で確保したアドレス以外を渡すと delete および delete[] の動作は未定義。
なので何が起こるかわからない。まぁ大抵の場合は落ちると思う。
で、NULL を渡した場合は何も起こらないと規格で決まっているので if で判別する必要はない。
関数内とか auto として定義した場合は、int *i としたときの i の値は不定。
明示的に初期化すべき。;

89 名前:デフォルトの名無しさん :03/12/02 21:38
>>88
> NULL を渡した場合は何も起こらないと規格で決まっている

free()と同じだな

90 名前:87 :03/12/02 21:43
どもありがとうございます。
とりあえず明示的にNULLで初期化しておけば良いのですね。
なんか電波を受信してint *i;を宣言した当初はNULLだと勘違いしてました。

91 名前:デフォルトの名無しさん :03/12/02 21:53
>>87
関係ないが、宣言と初期化は1文にしましょう
int *i = 0;

92 名前:87 :03/12/02 22:17
>>91
はい。
classのメンバ変数にint *i;を入れたときとかは
コンストラクタでi=NULL;でいいですか?

93 名前:デフォルトの名無しさん :03/12/02 22:41
>>92
class hoge {
int *i;
public:
hoge() : i(NULL) {};
};

94 名前:87 :03/12/02 22:55
>>93
あ、そのやりかた知りません。
メンバイニシャライザでi(NULL)って書き方できるんですか?

95 名前:82 :03/12/02 23:13
70ではありません(70が言ってることは、ちょっと理解できないところも
あります)。

でも、javaとC++の対応表みたいなものがあると助かるのは70と同意見です。


96 名前:デフォルトの名無しさん :03/12/02 23:16
漏れは C++ からJavaをやりだしたんだけど
細かいところがいろいろ違って面倒。

97 名前:デフォルトの名無しさん :03/12/02 23:54
>>94
ほぼなんでもあり。関数呼び出しだってできちゃうよ。

98 名前:デフォルトの名無しさん :03/12/03 00:39
>>97
ん?

99 名前:デフォルトの名無しさん :03/12/03 00:55
class A{
int value;
A(int value):????(value){}
};

????の部分はなんて書けばいいのでしょうか?

100 名前:デフォルトの名無しさん :03/12/03 01:00
>>99
A(int value) : value(value) {}
でメンバ変数を引数で初期化、になるので安心せよ。

101 名前:デフォルトの名無しさん :03/12/03 01:09
>>100
そうだったんですか。
なんかダメっぽい気がしてthis->value(value)としたら通らなくて困ってました。
サンクスです。

102 名前:デフォルトの名無しさん :03/12/03 01:35
つーか引数名変えればいいじゃん。
A(int val) : value(val) {}


103 名前:デフォルトの名無しさん :03/12/03 01:55
>>102
おまえは中学生か?

104 名前:デフォルトの名無しさん :03/12/03 02:06
バルバルうるさいなぁ

105 名前:デフォルトの名無しさん :03/12/03 02:39
>82
class Sub : public InterFace , private Super

106 名前:デフォルトの名無しさん :03/12/03 03:40
バルバルバルバルゥゥゥゥゥッ!

107 名前:デフォルトの名無しさん :03/12/03 06:06
俺用メモ

>>100 は ISO 規格 12.6.2-7 に例つきで載っている。
引数じゃなくてメンバを参照したい場合は、this->value。
ただし初期化順序に注意する必要あり。

108 名前:デフォルトの名無しさん :03/12/03 09:24
>>103
なんで中学生がどうとかいうツッコミをいれてるのかさっぱりわからん。
>>99のケースでどう書けばいいかわからないなら引数名を変えろってのは、
至極もっともなアドバイスだと思うんだが。
同一変数名の識別方法みたいな微妙なルールがわからないとき、
必ず全部理解しておかないとまずいって考え方してるの?

109 名前:デフォルトの名無しさん :03/12/03 14:20
初期化子では(コンパイラが仕様に準拠さえしていれば)
何も付けなくても的確に区別されるが、
それ以外ではそうはならないので、
名前を変えるのが面倒が無くて良い。
メンバに m_ の接頭辞か _ の接尾辞を付けるのがよく使われる。

110 名前:デフォルトの名無しさん :03/12/03 16:30
だからSTL使うと

111 名前:82 :03/12/03 20:26
>>105
ありがとうございます。
javaとC++の微妙な違いで少し混乱中です。

112 名前:デフォルトの名無しさん :03/12/03 21:40
配列宣言して初期化していない状態では
配列の中身はNULLと考えてよろしい?

113 名前:デフォルトの名無しさん :03/12/03 21:41
前々から気になってたんだが、禿げローストラップ先生の本には
「delete 0 は安全だよ!」
と書いてあるよな。

一方、FDISを見ると
「delete null-pointer は安全だよ!」
と書いてあって、更に、

> 3.2.2.3 - Macro NULL [diff.null]
> -1- The macro NULL, defined in any of <clocale>, <cstddef>,
> <cstdio>, <cstdlib>, <cstring>, <ctime>, or <cwchar>,
> is an implementation-defined C++ null pointer constant
> in this International Standard (lib.support.types).
(NULLは"null pointer"を表す処理系依存の定数である)

という記述もある。
そうすると、FDIS の方に書いてあるのは
「delete NULL は安全だが、delete 0 は必ずしも安全とは言い切れない」
とも解釈できるんだが、ここんところの真意はどうなっているんだろうか?

どうせ俺の短い人生の中で NULL != 0 な処理系に出会う可能性は
ほぼ皆無なんだが、こんな根本的な仕様を知らないまま育ってきて
しまったことに不安を感じるので、できれば教えてもらえないだろうか。

114 名前:デフォルトの名無しさん :03/12/03 21:44
NULL == 0 はANSIで決まってた予感。

115 名前:デフォルトの名無しさん :03/12/03 21:54
てことは
for(i = NULL; i < n; i++){
で問題ないと

116 名前:デフォルトの名無しさん :03/12/03 22:01
struct afo { int dqn; };
int afo::*p = 0;
int afo::*q = &afo::dqn;
if(p == q) std::cout << "sine";
else std::cout << "gaikichi";

117 名前:デフォルトの名無しさん :03/12/03 22:07
0はぬるぽですよ。C FAQ参照のこと。
逆にNULLのほうが規格で決まっているわけではないので、処理系依存。
(まあ0以外にdefineしてる処理系はないだろうけど)

118 名前:デフォルトの名無しさん :03/12/03 22:29
NULLはどんな処理系でも0。
ポインタに0を代入したとき、その処理系のヌルポインタ値に変換するのはコンパイラの責任
って聞いたことある。

例えば、1がヌルポインタの処理系があった場合
そのコンパイラは
int* p = 0;
としたら1を代入しなければならないらしい。

119 名前:デフォルトの名無しさん :03/12/03 22:40
ファイル(out1.txt)のデータが
0 1 2 3 3 3 4 5 6 7 8 8 8 8 8 8 8 9 9 10...
と0から10000まで並んでいるところから、0の個数、1の個数...100の個数...
を別なファイル(out2.txt)に出力するプログラムを作成しています。
C++で作成していますので、C++で動作するプログラムをお願いします。
皆さんよろしく。

120 名前:デフォルトの名無しさん :03/12/03 22:44
>>119
宿題スレでレスしてもらってるくせに
マルチしてるヤツって何なんだ?

121 名前:デフォルトの名無しさん :03/12/03 22:52
偽物の可能性もある。黙ってスルーするのが吉。

122 名前:デフォルトの名無しさん :03/12/03 22:52
>>117
スレ違い氏ね

123 名前:119 :03/12/03 22:53
提出までに時間がないのですいません。
急いでいます。

124 名前:デフォルトの名無しさん :03/12/03 22:59
>>123
真の教えて君にはまだまだ遠い。

125 名前:デフォルトの名無しさん :03/12/03 23:10
>>113
5.2.10-5 注 64)
Converting an integral constant expression (5.19) with value zero always yields a null pointer (4.10),
but converting other expressions that happen to have value zero need not yield a null pointer.

0になる整定数式を変換すると常に null pointer になる。
しかし、たまたま 0 になるその他の式を変換しても null pointer になるとは限らない。

126 名前:119 :03/12/03 23:21
まじで頼む。

127 名前:デフォルトの名無しさん :03/12/03 23:31
>>126
他の擦れでレスついとるやンか。
マルチポストしてレスも確認せんのか。まじで死ねヴォケ

128 名前:デフォルトの名無しさん :03/12/03 23:44
#define NULL (void *)0
って見たことある。
C++じゃなくてCだろうけど。

129 名前:デフォルトの名無しさん :03/12/03 23:49
良く C では良質なソースコードを読んで勉強するといった事を
アドバイスされますが、C++の場合も良質なソースコードを読む
事が上達の近道となりますか?その場合、具体的な良質ソース
コードの例って何かありますか?


130 名前:デフォルトの名無しさん :03/12/03 23:52
Qt

131 名前:デフォルトの名無しさん :03/12/03 23:53
boost

132 名前:デフォルトの名無しさん :03/12/03 23:55
int* p = NULL  としたとき

 int* p = (void*)0;

となるがC++では型チェックアウトとなるので

#define NULL 0 に定義されている。


133 名前:デフォルトの名無しさん :03/12/04 00:02
>>129
そんなもん、どんな言語でも一緒に決まってるだろ。
あと、自分のコードを人に見てもらうのもいいぞ。
人に見られることを意識するだけでもだいぶいいコード書くようになる。

134 名前:デフォルトの名無しさん :03/12/04 00:05
>>132 logic_error

135 名前:デフォルトの名無しさん :03/12/04 00:06
>>132
本当は

class Null
{
public:
 template<class type>
 operator type*() const { return 0; }
};
const Null NULL;

とした方がいいんだけどな。
more effective C++ 参照。

136 名前:デフォルトの名無しさん :03/12/04 00:25
次期C++には、予約語 nullptr を入れるとかいう話があるらしいね。

137 名前:デフォルトの名無しさん :03/12/04 00:26
できればもう改訂しないで欲しい。

138 名前:デフォルトの名無しさん :03/12/04 00:31
ばんばん改訂して欲しい。
boostは全部STLに入れる方向で。
PortableなsocketライブラリもSTLに入れて欲しいね。
ネットワーク当たり前の時代なんだから。

139 名前:デフォルトの名無しさん :03/12/04 00:32
漏れのはこうなって居る。

#ifndef NULL
# if defined(__cplusplus) || defined(_Windows)
# define NULL 0
# else
# define NULL ((void *)0)
# endif
#endif

140 名前:デフォルトの名無しさん :03/12/04 00:50
C++になって、CよりNULLを使う頻度が減った。
そう思いません?

141 名前:デフォルトの名無しさん :03/12/04 00:52
>>130
>>131
>>133
レスどうもです。

C++の場合はクラスの設計でほぼそれ以降の実装
のうまい、下手もほぼ決まってしまうような所があるので、
ちょっとCとは毛色が違うのかなという思いから質問して
みましたがやはり優良ソースを読むのが良いんですね。


142 名前:デフォルトの名無しさん :03/12/04 00:56
俺のNULL

#define NULL (3*4-12)

143 名前:デフォルトの名無しさん :03/12/04 01:04
ちょっと話がふくらむとすぐこれだ

144 名前:デフォルトの名無しさん :03/12/04 01:04
俺のNULL

#define  NULL (!1)

145 名前:デフォルトの名無しさん :03/12/04 01:19
俺のANULL

#define ANULL *

146 名前:デフォルトの名無しさん :03/12/04 02:09
>>140
Null Object Pattern があるのだ!

147 名前:デフォルトの名無しさん :03/12/04 04:37
他スレで放置されたのでこちらで質問させて下さい。

gdbで、実行ファイル中のオブジェクトについて調べるにはどうしたらよいのでしょう?
例えばstringな変数strの、
1) 中身の文字列そのもの
2) str.length()
について見たいのです。1)はprintで一応見れますが、他もズラズラ
見えるのでスマートでない気がします。
2)はわからないです。call も print も、 There is no member やら Couldn't find method
なんですが、これはそういうものなのでしょうか?それとも私がgdbの使い方を理解してないから?

先生方、よろしくお願い致します



148 名前:デフォルトの名無しさん :03/12/04 07:50
gdb のバージョンが古いんじゃないか?
1) p str.c_str()
2) p str.length()
でちゃんと見える。gdb 5.2 使用

149 名前:デフォルトの名無しさん :03/12/04 08:18
>147
貴様にお父さんなどと呼ばれる覚えはない!
娘はやらん!帰れ!


150 名前:デフォルトの名無しさん :03/12/04 15:25
>>81
抜けますた(・∀・)
私はどっちなんでしょうか

151 名前:デフォルトの名無しさん :03/12/04 15:40
マゾだな。

152 名前:デフォルトの名無しさん :03/12/04 19:34
>>150
ハゲるな。

153 名前:デフォルトの名無しさん :03/12/04 20:45
そしてビヤーネへ・・・

154 名前:147 :03/12/04 22:50
>>148
先生原因がわかりました。
「c++なら -gstabs オプションが -g の代わりだ」
とかぬかした先輩が原因でした。

-g オプションでちゃんと見られるようになりました。
どうもありがとうございました!

155 名前:デフォルトの名無しさん :03/12/05 03:34
C++言語の予約語はいくつありますか?

156 名前:デフォルトの名無しさん :03/12/05 08:24
>>155
30個ぐらい

157 名前:デフォルトの名無しさん :03/12/05 14:05
>>155
void int signed unsigned long short float double char wchar_t bool
auto register extern static const volatile typedef
static_cast reinterpret_cast const_cast dynamic_cast
new delete sizeof typeid
enum union struct class inline template typename namespace using
public protected private friend virtual this
if else for while do switch break continue return goto
try catch throw

54個思いつたけど、他に何かあったっけ?

158 名前:デフォルトの名無しさん :03/12/05 14:12
and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq
とか。
つか、C++3rdに一覧なかったか?


159 名前:デフォルトの名無しさん :03/12/05 14:18
>>157のに加えて↓で全部。PLC++3rdで確認した。
and and_eq asm bitand bitor case compl default explicit export
false mutable not not_eq operator or or_eq true xor xor_eq

160 名前:デフォルトの名無しさん :03/12/05 14:19
mutable asm explicit export true false operator case default
が抜けてるな

161 名前:デフォルトの名無しさん :03/12/05 14:21
>>158
うわ。それ知らなんだ。

それ以外には
mutable explicit asm export true false
があったな。
というわけで、71個か。

162 名前:デフォルトの名無しさん :03/12/05 14:22
あ、operator, case, default もあったか。
つーことは74個か。

163 名前:デフォルトの名無しさん :03/12/05 14:25
いいケコーンっぷりだw

164 名前:デフォルトの名無しさん :03/12/05 14:42
>>157
wchar_tは違うと思う。
stdef.hかどっかにtypedefされてると思う。

165 名前:デフォルトの名無しさん :03/12/05 14:48
wchar_t は C では typedef だが C++ では予約語。

166 名前:デフォルトの名無しさん :03/12/05 15:18
まーじーでー

167 名前:デフォルトの名無しさん :03/12/05 19:26
まじまじ

168 名前:デフォルトの名無しさん :03/12/05 21:34
予約語を全部?使ってプログラムを(いろはにほへとみたいに綺麗に意味があるような感じで)
書いてたサイトがあったな。もっといかしたのキボンヌみたいなこと書いてあったよううなきがした。

169 名前:デフォルトの名無しさん :03/12/05 22:07
でも、export 使ったら
コンパイルできるコンパイラが限られるなぁ。
Comeau C++ くらいか?

170 名前:デフォルトの名無しさん :03/12/05 22:15
C++ BuilderのPreview版はつかえるらしい。

171 名前:デフォルトの名無しさん :03/12/06 00:53
CとObjective-Cの知識は一通りあるので
なんとか勘でC++を使ってきましたが、
限界を感じずにはおれないので一から勉強しなおそうと思います

良書がありましたらご紹介ください
よろしくおねがいします

172 名前:デフォルトの名無しさん :03/12/06 01:09
>>171
スレ違い。
書籍スレに逝け

173 名前:デフォルトの名無しさん :03/12/06 11:45
>>171
このスレの1桁台のレスにいくつか挙がってるyo

174 名前:ひーん :03/12/06 13:56
何がおかしいか分からないよ
#include<iostream.h>
#include<limits.h>
wa(int);

void main()
{
int su;
cout<<"数値を入力してください"<<endl;
cin>>su;
while(!cin){//10
cout<<"不正な数値(文字)が入力されました"<<endl
<<"数値を入力してください"<<endl;
cin.clear();
cin.ignore(INT_MAX,'\n');
cin>>su;
}
cout<<"1〜"<<su<<"までの和を算出します"<<endl;
cout<<wa(su)<<"になりました";
}//20

int wa(SU)
{
int i,goukei=0;
for(i=1;i>=SU;i++){
goukei+=i;
}
return SU;
}//30

175 名前:デフォルトの名無しさん :03/12/06 14:07
ネタかもしれんが、一応反応しといてやる。

× wa(int);
○ int wa(int su);

× int wa(su)
○ int wa(int su)

× for(i=1;i>=su;i++){
○ for(i=1;i<=su;i++){

× return SU;
○ return goukei;

176 名前:デフォルトの名無しさん :03/12/06 14:26
>>174
> 何がおかしいか分からないよ
頭がおかしい。

>>175
> 一応反応しといてやる。
心がやさしい。

177 名前:デフォルトの名無しさん :03/12/06 15:01
175は優しくて女にモテそうだな

178 名前:aaaaa :03/12/06 15:21
そんなものの言い方するやつが女にもてるか!
優しいだけじゃもてねぇよ

179 名前:デフォルトの名無しさん :03/12/06 15:32
先生!質問!!
getoptを使いたいのです。
C++用のクラスライブラリって調べるといくつかあるんですが、
どれが1番ポピュラーなんでしょうか?
昔のlibg++にはあったようですが、今はなくなったみたいです。
皆さんは何を使っていますか?
環境はLinux(RedHat9)です。

180 名前:デフォルトの名無しさん :03/12/06 15:55
>175は利用される性分。

>>179
私ゃ自前で作ったのかXのToolKit任せかどっちか。

181 名前:激しい初心者 :03/12/06 17:21
今日初めてクラスを勉強しました
で、本の通り行ったのですがエラーが出ます
助けてください

#include<iostream.h>
#include<string.h>

class Customer{
public:
int id;
char name[20];
};

int main()
{
Customer c;
c.id=100;
strcpy(c.name,"田中");
cout<<c.id<<endl
<<c.name<<endl;
return 0;
}

実行結果
リンク中...
LIBCD.lib(wincrt0.obj) : error LNK2001: 外部シンボル "_WinMain@16" は未解決です
Debug/クラス2.exe : fatal error LNK1120: 外部参照 1 が未解決です。
link.exe の実行エラー

182 名前:激しい初心者 :03/12/06 17:32
分かりました
すんません

183 名前:デフォルトの名無しさん :03/12/06 18:59
VisualC++でクラスウィンドウからView、そしてOnDrawを開いてそこに描画コードを
打ち込んで使っていたのです。
CPad for Borlandでコンパイルやろうとした場合(一続きのプログラム)はどうしたらよいのでしょうか?


void CkaachanView::OnDraw(CDC* pDC)
{

184 名前:デフォルトの名無しさん :03/12/06 19:11
>>183
スレちがい 「別れようってことなの?」

185 名前:デフォルトの名無しさん :03/12/06 20:35
スレ違いだったようで申し訳ありませんでした。
ただ、描画コードとか使ってグラフ描くときにヘッダとかどう書いたら言いのカナァと。

すいませんでした

186 名前:デフォルトの名無しさん :03/12/06 22:25
質問です。
char* str;
str=new char[100];
などとして動的にメモリを確保したとき、これを解放するには
delete str;
delete[] str;
のどちらを使えばいいんでしょうか。

187 名前:デフォルトの名無しさん :03/12/06 22:30
delete str;

188 名前:デフォルトの名無しさん :03/12/06 22:35
!

189 名前:デフォルトの名無しさん :03/12/06 22:35
delete str;
delete[] str;
は何が違うんでしょうか。またどのように使い分ければいいんですか?

190 名前:デフォルトの名無しさん :03/12/06 22:45
>186
delete[] str;
>189
たいして違わない。

デストラクタの定義されたオブジェクトをdeleteするときに
一個だけデストラクタが呼ばれるか、全部のデストラクタが呼ばれるかの違い。


191 名前:デフォルトの名無しさん :03/12/06 23:10
strがchar一個を指しているのか配列を指しているのかコンパイラには区別がつかないから教えてやらねばならんという話。

192 名前:187 :03/12/06 23:12
char配列だから、即答してしまったが、訂正 delete[] str;  の方が安全だな。


193 名前:デフォルトの名無しさん :03/12/06 23:28
>>187 (>>190も?)
なにか勘違いしてないか?
xxx = new XXX [N]; で生成したら delete [] xxx;で破棄。
xxx = new XXX; で生成したら delete xxx;で破棄。
それ以外の動作は未定義。
charやintであってもだ。

194 名前:デフォルトの名無しさん :03/12/06 23:40
>>193
特定の処理系の話と、規格上の話を混同しているんだろうね。VC あたりだと
190 の言うとおりなんだが。

ついでに delete, delete[] で悩むぐらいなら boost::scoped_array, boost::shared_array
あるいは std::vector を使った方が良いと思うぞ。

195 名前:187 :03/12/06 23:48
ちなみにMSのC++だと (今のVC++も)
delete str;に比べdelete[] str;の方が余分に関数が1つ入る。
今時1関数など無視して良いが、昔は・・・・・気にしてた時期あり。
今なら193に賛同する。

196 名前:デフォルトの名無しさん :03/12/06 23:53
new[] は確保した数とかを保存する領域を
一緒に確保することがあるので
delete[] を使うべし。
まぁ、デストラクタが無い場合は省略されることが多いけど。

197 名前:デフォルトの名無しさん :03/12/06 23:57
>>196
俺も同じ事を考えた。つまり new[] ではなく new で確保された領域を
delete[] で開放すると、「確保した数が保存されているはずの領域」
をアクセスするので、もしその位置が new が返す先頭アドレスとは
違っていた場合、コア吐く可能性がある。もしそうでなくても、数は
意味を持たないので、必要ない領域まで開放してしまい、ヒープ構造
は破壊されそうだ。

198 名前:デフォルトの名無しさん :03/12/07 00:02
PageUp、PageDownキーが押下された場合のイベントを拾いたいのですが、
MSDNにそれらしいVKxxのdefineがありません。
どうやって拾うのでしょうか?

199 名前:デフォルトの名無しさん :03/12/07 00:05
>>198
スレ違い。

200 名前:デフォルトの名無しさん :03/12/07 00:19
>>198
http://www.comrade.co.jp/ftp/km2/manual/Properties/VKeyCode.htm

201 名前:デフォルトの名無しさん :03/12/08 02:30
保守上げ

202 名前:デフォルトの名無しさん :03/12/08 02:31
上がってなかった

203 名前:デフォルトの名無しさん :03/12/08 04:42
いまどき素のnewは使わないでしょ。

204 名前:デフォルトの名無しさん :03/12/08 13:50
>>203
なにいってるの使いますよ
あなたはSTLで我慢できるお人なのですね
それともメモリープールのoperator new派なのか?

205 名前:デフォルトの名無しさん :03/12/08 13:58
ここ最近、スマートポインタのコンストラクタ引数以外でnew書いた記憶ないな。

206 名前:デフォルトの名無しさん :03/12/08 15:23
STATEパターン(?)っぽいことで相談です。

class Base {};
class A : public Base {};
class B : public Base {};
class C : public Base {};
class D : public Base {};

Base* Hoge(int type,int arg1,int arg2){
  switch (type){
  case 0: return new A(arg1,arg2);
  case 1: return new B(arg1,arg2);
  case 2: return new C(arg1,arg2);
  case 3: return new D(arg1,arg2);
  default: return NULL;
  }
}

こんな感じのコードがあるわけですが、
newするクラスだけが違ってほかはいっしょなので、
なんかテーブルで一括してできそうな気がするんです。
switchを使いたくねー、っていう、ただそれだけではありますけど。

207 名前:206 :03/12/08 15:25
って、書いてて思い出しタ━━━━(゚∀゚)━━━━!!
Modern C++ Designのどっかに、こんな感じのことに関する記述が
なんかあったのを思い出したのでそれを読みますね。
聞いてくれてありがとうアロエリーナ。

208 名前:デフォルトの名無しさん :03/12/08 16:01
書くと思い出しちゃうんだよね。

209 名前:デフォルトの名無しさん :03/12/08 16:40
>>206
デザパタもC++も知らない漏れには state じゃなくて factory の
中途半端なのに見える。。。

210 名前:デフォルトの名無しさん :03/12/08 18:50
>>209
stateで合ってると思うよ。中途半端だけど

211 名前:デフォルトの名無しさん :03/12/08 20:58
>>203
漏れが使ってるそこそこ著名なライブラリなんぞ
newをガンガン使わせる仕様だぜ
deleteしないのがいささかキモイが

212 名前:デフォルトの名無しさん :03/12/08 23:09
テーブル化すると、
class Base {};
class A : public Base { public: A(int a, int b); };
class B : public Base { public: B(int a, int b); };
class C : public Base { public: C(int a, int b); };
class D : public Base { public: D(int a, int b); };

template <class T> Base* CreateBase(int arg1, int arg2) { return new T(arg1, arg2); };
Base* (*fac[4])(int,int) = {
CreateBase<A>, CreateBase<B>, CreateBase<C>, CreateBase<D>
};
って感じ?

213 名前:デフォルトの名無しさん :03/12/08 23:38
別に switch でもあまり変わらん気もするなぁ。
どうせコピペで拡張できるんだし。

214 名前:デフォルトの名無しさん :03/12/08 23:53
あぁ、追加じゃなくて挿入したいときは
テーブルの方が便利やね。

215 名前:デフォルトの名無しさん :03/12/09 08:36
どう見てもStateパターンじゃねーよ。Factoryだ。

216 名前:デフォルトの名無しさん :03/12/09 09:07
State を Factory してるとか...。

217 名前:デフォルトの名無しさん :03/12/09 12:23
>>216
でしょうね。>>212 みたいな単純な switch の置き換えの配列じゃなくて、
生成関数を map でひくとかすると面白いかも。

218 名前:デフォルトの名無しさん :03/12/09 13:24
>>211
ObjectARX か何かですか?

219 名前:デフォルトの名無しさん :03/12/09 16:55
すんまそん

VC6++のIDE周りの問題なんですが、質問はここでいいんでしょうか?
どこで質問すればいいのやら・・・VC++すれはMFC限定とか書いてあるし・・・


220 名前:デフォルトの名無しさん :03/12/09 17:46
>>219
↓このへんかなぁ。
【初心者歓迎】C/C++室 Ver.3【環境依存OK】
http://pc2.2ch.net/test/read.cgi/tech/1069719929/

221 名前:デフォルトの名無しさん :03/12/10 01:02
例えばtemplate<typename T> class NODEなら
クラステンプレートのコンストラクタには
NODE<T>() {・・・}のように
型指定の<>を付けた方が良いんですか?

222 名前:デフォルトの名無しさん :03/12/10 08:58
いいえ

223 名前:デフォルトの名無しさん :03/12/10 09:19
template<typename T> class Node { Node(); };
template<typename T> Node<T>::Node() { ... }

224 名前:デフォルトの名無しさん :03/12/10 15:11
質問です。

std::locale loc( "japanese" );
std::locale::global( loc );
std::ctype< wchar_t > const & ct = std::use_facet< std::ctype< wchar_t > >( loc );

std::string str1("hello world.");
std::string str2("はろーわーるど。");
char const * b1 = str1.c_str();
char const * e1 = b1 + str1.size();
char const * b2 = str2.c_str();
char const * e2 = b2 + str2.size();
wchar_t dest1[ 256 ] = { 0 };
wchar_t dest2[ 256 ] = { 0 };

ct.widden( b1, e1, &dest1[0] );
ct.widden( b2, e2, &dest2[0] );

std::wcout << &dest1[0] << std::endl; // <- (1)
std::wcout << &dest2[0] << std::endl; // <- (2)

上記コードで、(1) の行は正しく "hello world." と表示されたのですが、
(2) の部分は文字化けしてしまいました。環境は Win2k, VC++7.1 です。
(2) の部分でも正しく「はろーわーるど。」と表示させるにはどうしたらいいでしょう?
あと、他のコンパイラではどういった動作を起こすのでしょうか?


225 名前:デフォルトの名無しさん :03/12/10 15:27
codecvtあたりについてgoogle様に伺ってみるとよろしい。

226 名前:デフォルトの名無しさん :03/12/10 15:40
質問お願いします。
Windowsで言うダイアログボックスにあたるクラスと、
とある処理を担う別のクラスMがあります。

ダイアログボックスのボタンなどが押された場合に、Mを使って処理をし、
またMの処理の結果を、ダイアログボックスに表示したく思っています。

この場合、依存関係を最小にするには、どう関連付けるのが良いのでしょうか。
相互に相手を知ってしまうと、なんだかクラスわけの意味が無い気がして…。
さりとて一緒にしてしまっては、使いまわしが利かなそううで困っています。

227 名前:デフォルトの名無しさん :03/12/10 15:57
>>226
コントロールクラスからダイアログボックスとMに関連を張る。
コントロールクラスがないなら、ダイアログボックスとMとどちらか主体になる
クラスから他方に向けて関連を張る。
たとえば、ダイアログを主体にするなら、Mの処理を関数にして結果は戻り値で受けるようにする。


どうでもいいが、あなたが質問者なんだから、「回答お願いします」だろ。

228 名前:224 :03/12/10 16:07
>>225
ありがとう。少し勉強してみる。

229 名前:デフォルトの名無しさん :03/12/10 16:08
>>227
いや「この子をお願いします」みたいな感じの用法だし、間違ってないんじゃね


230 名前:226 :03/12/10 16:36
>>227
コントロールクラスを挟むのは、いかにもスマートでかっこいいですねぇ。

しかし…、"ボタンが押された"などの通知はダイアログボックスクラスに
行くのですが、このためにどうしても綺麗に挟む方法が考えられなくて…。
結局は、ダイアログボックもコントロールクラスを知っているような
実装しか思いつきません。通知先を変えるのも複雑になるしどうすれば…。

今回はコントロールが無い場合の方で、示唆して下さった方法を使わせて頂きます。
レスありがとうございました。(質問〜は>>229さんみたいな意味で使ってました)

231 名前:デフォルトの名無しさん :03/12/10 19:32
>>226
もう寝ちゃってるかもしれませんが、例えばA というボタンを持つ
Dialog クラス(を定義するヘッダ)は、同時にそのダイアログを利用するためのインタフェイス

class IHogeDlgListener {
public:
 virtual void button_A_pressed() = 0;
};

を提供し、使う側では

class App : public IHogeDlgListener {
 void doHogeDialog() {
  Hoge dlg(this);
 }
 virtual void button_A_pressed() {
  // dlg で A が押されたときの処理
 }
};

みたいに書くのは、割りと一般的だと思います。

232 名前:226 :03/12/11 01:04
>>231
なるほど!インターフェイスだけ決めておいて
なおかつ関連づけたりせずに、引数で渡せば良いのですね。

どうも設計だの関連だのと勉強しているうちに、視野が狭くなっていました。
扱うのがモーダルダイアログな事もあって、これで益々分かりやすくなりました。
レスありがとうございました。

233 名前:デフォルトの名無しさん :03/12/11 04:15
>>232
なんか勘違いしているような・・・

234 名前:デフォルトの名無しさん :03/12/11 16:04

基本的な質問ですいませんが、
bool flag = true;
で宣言&初期化した flag をトグルするベストな
方法ってなんでしょう?

つまり true を faulse に、 faulse のときは true にしたいのですが。

flag = !flag;
を考えてみましたが、もっとシンプルなやり方は
なかったかなと思いまして、質問しました。

235 名前:デフォルトの名無しさん :03/12/11 16:05
>>234
false ですたね・・・

236 名前:デフォルトの名無しさん :03/12/11 16:17
>>234
flag = !flag; を良く使う。

237 名前:デフォルトの名無しさん :03/12/11 16:30
>>234
flag ^= false;

238 名前:デフォルトの名無しさん :03/12/11 16:32
>flag = !flag;
それがベストだと思うけどなぁ。これ以上シンプルなのはないっしょ?

ついでだから俺も質問してみたい。
いろんなクラスに、スイッチ系のフラグがあるよね。

void On(void){flag = true;}
void Off(void){flag = false;}
bool IsOn(void)const{return flag;}

俺は大体こんな感じで制御してるけど、たまにトグルさせたいときがある。
そのときは

if (hoge.IsOn()){ hoge.Off(); }
else { hoge.On(); }

ってやるんだけど、操作はすべてひとつのオブジェクトに対するものだから

void Toggle(void){flag = !flag;}

ってのを作るべきなんかねぇ?
Effective C++ に書いてある「完全かつ最小限なインターフェース」ってのを
目指すなら、これって不要な気もする。やっぱいるか? いらんか。

あと、On(),Off()って二つ作るんじゃなくて、

SetOnOff(bool b){flag = b;}

がいいのかなー、と悩んだりもする。
どうすればいいんだ。みんなはどうしてる? 教えて。

239 名前:デフォルトの名無しさん :03/12/11 16:42
>>237
あってるの?

240 名前:デフォルトの名無しさん :03/12/11 16:52
>>239
無茶苦茶。
int flag = 0 or 1; として
flag ^= 1; ならいいが。

241 名前:デフォルトの名無しさん :03/12/11 16:57
>void Toggle(void){flag = !flag;}
bool返したほうがより使える

242 名前:デフォルトの名無しさん :03/12/11 17:14
>>236
>>238
これでよかったですか。
どもども。

243 名前:デフォルトの名無しさん :03/12/12 01:02
>>238
フラグの意味に依る。

244 名前:デフォルトの名無しさん :03/12/12 01:10
もしスレ違いだったら誘導ください

C++のソースコードを読むためのツールでお薦めありませんか?
例えば C で言えば emacs + global とか。
クラスが追跡しやすいといいのですが
みなさんはどのようにして読んでますか?

245 名前:デフォルトの名無しさん :03/12/12 01:16
together最強!
値段は最凶!

246 名前:デフォルトの名無しさん :03/12/12 01:19
貧乏人なんでフリーの奴がいいんですが。


247 名前:デフォルトの名無しさん :03/12/12 02:28
doxygen使ってます。もちろんフリー

248 名前:デフォルトの名無しさん :03/12/13 01:14
include <typeinfo.h>
// 使用したC++キーワードの総数 : 62
// なお、実行しても何も起こりませんのであしからず。

namespace N{
extern double D = 7.0;
template <typename T>
class C{
public:
static long L;

explicit C(T volatile * const P)
:M(const_cast<T*>(P)){
}

virtual ~C(){
try{
(*this) >> ' ';
}catch(...){
auto float f=3.14;
}
}
friend void operator >>(C& O,T P){
throw 0;
}


249 名前:デフォルトの名無しさん :03/12/13 01:14
protected:
union{
T *M;
signed G;
};
private:
};
typedef C<char> A;

struct S : A{
enum E{
J,K,L
} Q;
mutable bool B;
S(A& O);
};


250 名前:デフォルトの名無しさん :03/12/13 01:14
inline S::S(A& O):A(O){
if( dynamic_cast<S*>(&O) ){
register S *R = static_cast<S*>(&O);
B = reinterpret_cast<unsigned>(R) ? true : false;
}else{
for(short I=0; M[I]; I++ ){

switch((wchar_t)M[I]){
case L' ':
continue;
default:
do goto L;
while(sizeof(typeid(A)));
L:
break;
}
}
}
}
}



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