1 名前:v(^・^)v [2007/09/26(水) 03:41:13 ] C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレに お願いします。 テンプレその他 >>2-15 付近参照 前スレ(実質 part57) C++相談室 part56 pc11.2ch.net/test/read.cgi/tech/1185377587/
148 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 00:53:05 ] class Base { public: virtual Base *NewInstance() = 0; }; class DerivA : public Base { public: virtual Base *NewInstance(){ return new DerivA; } }; class DerivB : public Base { public: virtual Base *NewInstance(){ return new DerivB; } }; Base *pA = new DerivA; Base *pB = new DerivB; Base *pC = pA->NewInstance(); Base *pD = pB->NewInstance();
149 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 00:53:41 ] Base* pA = new DerivA(); Base* pB = new DerivB();
150 名前:147 mailto:sage [2007/10/04(木) 01:02:02 ] >>148 、149 目からウロコが落ちました。 インスタンスを作成する関数を別途で作ればいいわけですね。 ありがとうございます。
151 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 01:04:17 ] >>148 DerivA::NewInstanceはDerivA*を返し、 DerivB::NewInstanceはDerivB*を返し、 という具合に、そこは共変にしてほしいな。
152 名前:デフォルトの名無しさん [2007/10/04(木) 01:06:08 ] 凶変を許したことでできるようになったことってなんだっけ? なんかの本にかいてあったが忘れた
153 名前:デフォルトの名無しさん [2007/10/04(木) 01:15:57 ] >>136 boostにはなんて名前で入ってたっけ
154 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 01:18:23 ] >>152 pAはDerivA*と分かっているとき、 DerivA* pA2 = static_cast<DerivA*>(pA->NewInstance()); のようなキャストを型安全性を損なうことなく排除できる。
155 名前:デフォルトの名無しさん [2007/10/04(木) 02:07:15 ] dynamic_castすれば共変なしでも安全じゃね?
156 名前:デフォルトの名無しさん mailto:age [2007/10/04(木) 02:08:25 ] videointroplayer.web.fc2.com/?ii9YN1kO-TK36%+WhqyiIrhz0F110%+Kjtps4byn7a119%+esA5NHPWRF1115%+026mGIi9Z4824%+@1@_KeyboardCrusher
157 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 02:29:39 ] >153 BOOST_PP_STRINGIZE
158 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 08:19:17 ] これじゃだめなん? Base *pC = new DerivC;
159 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 08:20:10 ] Base *pC = new DerivC(pA); Base *pC = new DerivC(pB);
160 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 21:28:42 ] >>155 それだと余計な負荷がかかる。
161 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 01:29:04 ] 俺的c++開発環境構築メモ 目的:最終的にlinuxで動かせるようにしないといけないけどVisual Studio捨てれない winxpにvmwareいれてゲストOSとしてubuntu7を入れる ubuntuの/home/srcをsambaで共有できるようにしてホストOSのwinxpからみれるようにする /home/src = \\ubuntu\src の下にVisual Studioのプロジェクト作成 makefileはeclipse/CDTで自動生成 あとはemacsでメインのコードの編集するけど、flymakeとか使いつつ インテリセンスも使えてeclipse/cdtのリファクタリング機能も使える環境のできあがり
162 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 04:20:16 ] 俺がいる
163 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 08:18:16 ] もう遅いだろうがcoLinuxを薦めてみる
164 名前:デフォルトの名無しさん [2007/10/05(金) 12:27:41 ] coMomongaを勧めてみる
165 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 12:59:49 ] coLinuxの方が便利なの? 速度が速い以外のメリットがないなら、もう乗り換えれない
166 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 15:23:45 ] coLinuxってkernelのバージョンあがるたびに中身を全消ししないといけないって聞いたのだけど 違うの?
167 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 17:36:55 ] ヘッダファイルなどで記述したグローバルなstatic変数は, includeしたソースが複数ある(各ソースではincludeガードが起きずに展開される) 場合も単一の存在となるんでしょうか? それとも別々の独立した変数となるんでしょうか?
168 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 17:41:00 ] それをインクルードしたソースファイルごとに別々に作られることになる
169 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 18:02:52 ] ありがとうございます. あれ,でもクラス変数などは単一なんですよね? うーむ,基本の理解が全然出来ていない.
170 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 18:26:17 ] クラスの static 変数はどこかで1個だけ実体を定義する必要がある。 class A{ static int x; }; int A::x; // <-- これ 2個以上のソースファイルで定義したら、定義が重複してるってリンクエラーになる。 static でない普通のグローバル変数と同じあつかい。
171 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 20:36:51 ] #includeは単にファイルをくっつけてるものと考えれば理解しやすいかも