- 1 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 21:04:54 ]
- C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレに お願いします。 前スレ C++相談室 part66 pc12.2ch.net/test/read.cgi/tech/1231640498/ ※part63, part66 が重複していたようですので part69 としました。
- 598 名前:595 mailto:sage [2009/05/30(土) 03:25:48 ]
- うーん、改めて見てみると、俺が初心者時代に変な思い込みしただけかもしれん。まあいいや。
- 599 名前:デフォルトの名無しさん [2009/05/30(土) 08:16:34 ]
- (なんかVC++から派生してC++の話と離れてきてる感じですいません・・・)
ttp://www.forest.impress.co.jp/article/2008/12/11/linkshellext.html ここによると、 >また、本ソフトは“ジャンクション”や“ハードリンク”なども作成可能。 >Windows Vistaでは多くの場合、シンボリックリンク以外を利用する必要はないが、 >Windows XP以下のバージョンのWindowsではシンボリックリンクが利用できないので、 >これらで代用しよう。 ってあるからシンボリックリンクはだめだけどジャンクションはいいみたいです で、つまりCドラのファイルをDドラに移して、CドラにはDドラの移転先へのリンクだけ残しておけばいい みたいな感じでいいんでしょうかね?
- 600 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 09:47:49 ]
- std::vector<double> a;
std::vector<double> b = a; この場合って、 コピーコンストラクタが呼ばれるのか、代入演算子が呼ばれるのか コンパイラによって違うんだっけ? どこかに書いてあった気がするんだが忘れてしまった。
- 601 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 10:01:08 ]
- >>600
必ずコピーコンストラクタ。
- 602 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 10:01:48 ]
- const_cast…cv修飾子を除去するのに使う。
reinterpret_cast…ポインタと整数型の変換に使う。 dynamic_cast…略。滅多に使わず事足りる。 static_cast…以上3つ以外 っていう認識でいるわ。
- 603 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 10:04:10 ]
- >>600
カンチガイしているな std::vector<double> a;//デフォルトコンストラクタ std::vector<double> b = a;//コピーコンストラクタ これらは「新しいオブジェクトを作る(construct)」なのだから 呼ばれるのは両方ともconstructor。 そして呼ばれるのは当然 前者はデフォルトコンストラクタ、後者はコピーコンストラクタ。 一方、 std::vector<double> x;//デフォルトコンストラクタ このとき x=b; としたら、これは新しいオブジェクトを作るわけではないのだから 代入演算子operator = が呼ばれる。
- 604 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 10:15:58 ]
- >>601,603
ありがと!
- 605 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 15:07:01 ]
- >>602
君はキャストしない方がいい。いつか死ぬ。
- 606 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 15:15:03 ]
- >>605
どこが間違い?
- 607 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 15:27:56 ]
- >>606
>>605ではないが、禿本のキャストに関する部分を読んでこい。
- 608 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 15:40:16 ]
- >>607
禿本持ってないが、今度勉強してみるわ。 んで >>605さん、>>602のどこが間違い?
- 609 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 15:49:27 ]
- dynamic_castを多用するようになってきたら設計ミスを疑った方がいい。
- 610 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 15:53:01 ]
- 俺はクロスキャストの時だけdynamic_castを使っているけどな
- 611 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 15:54:56 ]
- やむを得ない場合もあるけど、クロスキャストを多用するのも以下略
- 612 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 15:58:07 ]
- クロスキャストは仮想関数では解決できないだろ
- 613 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 15:59:31 ]
- そういう状況が多数生まれる時点で糞設計ってことを言いたかったんだけど。
- 614 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 16:04:06 ]
- 誰も「多数」とは言ってないわけだが
- 615 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 16:07:31 ]
- >>614
>そういう状況が多数生まれる の多数ってのは >クロスキャストを多用する の意味なんじゃないの? なんで分からないの?w
- 616 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 16:22:24 ]
- 全くの初心者でお聞きしたいんですが、C++の講義ではTurboCというソフトを使って講義が進められるのですが
自宅のPCで同じことをするにはどういったソフトを使えば良いのでしょうか? 講義も全くわからずコンパイルという意味も全くわからずソフトを探すこともままなりません。どうかご教授ください。
- 617 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 16:22:51 ]
- 誰もクロスキャストを「多用する」とは言ってないわけだが
- 618 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 16:26:17 ]
- >>617
は>>612と同一人物? そうだとしたら、>>612は誰に対するレス?
- 619 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 16:27:30 ]
- 何一人でエキサイトしてんの?
- 620 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 16:30:20 ]
- >>619
お前は誰に対するレス? 安価つけてくれ、分からないから。
- 621 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 16:32:15 ]
- >>620
断る それ位自分で見抜け
- 622 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 16:34:06 ]
- >>621
いや、それを明らかにしておかないと、 俺が論破してもはぐらかされるだろ。 そういうヤツが多すぎるから、はっきりさせないと不毛な書き込みになる。
- 623 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 16:34:32 ]
- 初めから不毛だと気づいてないのかこの馬鹿は
- 624 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 16:36:34 ]
- 2chで議論すること自体不毛だよな。
- 625 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 16:41:11 ]
- まあせめてID付きの板でやるとか、コテハン付けるとかね。
- 626 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 16:44:20 ]
- >>622
顔真っ赤
- 627 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 16:47:07 ]
- >>626
鏡見て言ってるんだよね?
- 628 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 17:02:09 ]
- 鏡?ディスプレイで十分なのに鏡?なぜに?
- 629 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 17:02:51 ]
- dynamic_castよりconst_castやreinterpret_castの方が多用したらまずいと思うんだけどどうだろうか
const_castなんかいまだに使いどこがわからん
- 630 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 17:08:12 ]
- const_castはsetの要素を変更するのに使う
- 631 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 17:09:15 ]
- >>630
そりゃまずいんじゃね? 木構造が壊れそうだが
- 632 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 17:18:40 ]
- >>629
const_castを使う主なケースは、糞なCのライブラリ関数の引数に constな変数を渡すときだな。例を挙げるとこんな感じ。 void stupid_func(char *filename); // prototype void Foo::some_method(const std::string& filename) { stupid_func(const_cast<char*>(filename.c_str())); }
- 633 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 17:22:24 ]
- >>631
もちろん比較に影響及ぼすような変更はダメだぞ 構造体とかを入れたsetで、メンバの一つをキーに使ってるような場合があるだろう そういう時にキー以外のメンバを変更するために使う
- 634 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 17:30:54 ]
- >>632
なるほど、ライブラリに渡すときなんかに使うのか いくら糞でもライブラリ側を修正するわけにいかないもんな
- 635 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 17:55:27 ]
- volatile、組み込みでは見かけるがそれ以外では見かけたことがないんだが
おまいらはvolatileってどんな時(除く組み込み用途)使っている? あと、const_castでvolatileを取るとる時ってどんな時?
- 636 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 17:55:44 ]
- >>633
俺はそういうのはmutableでやるなぁ。 const_castでやると、keyも含めて全て変更可能な「状態」になってしまうし。
- 637 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 18:09:49 ]
- >>583
aliceとかいう名前の開発ツールがたくさん入ってるから_
- 638 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 18:27:09 ]
- >>635
デバイスドライバを書く時には当然使う必要あるよね。 あとは、インラインアセンブリでローカル変数を上書きする時とか。 こんなことめったにやらないが。
- 639 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 18:48:24 ]
- >>636
mutableにすると、本当にキー以外もconstにしたいときに困るだろう あくまでsetに入れたときの制約であって、そのためにmutableにするのは乱暴すぎる
- 640 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 19:11:35 ]
- キーがあるようなのはmapを使うなぁ
setの要素を変更とかやったことないな 今度やってみるか
- 641 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 21:11:30 ]
- >>635
VC++ではマルチスレッド対策の効果を独自に付加している。 msdn.microsoft.com/en-us/library/12a04hfd.aspx Unixだとマルチスレッドでvolatileなんて使うなボケらしいが。 const_castで外したくなる状況は分からない。
- 642 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 22:40:15 ]
- 誰も答えてやらない>>616のために
Visual C++ Express Editionでぐぐれ
- 643 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 22:44:10 ]
- Visual C++ Express Editionを知った後にTurbo Cを使うなんて、、、地獄だ。。
- 644 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 22:45:14 ]
- >>638, >>641
どうも、ほとんどアプリ系じゃ使わんということですな >>641 の例じゃ普通はmutexやクリティカルセクション使うんじゃないの それでvolatileを使うメリットがよく分らん,orz. コードが簡単になるがメリット?
- 645 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 23:24:24 ]
- Effective C++でconst_castはoperator[]の定義で使うことがあるみたいに書いてあったよね?
ttp://ritaz.blog64.fc2.com/blog-entry-66.html より引用。 class sample { public: ...; const char& operator[](unsigned int position) const { ...; return dat[position]; } char& operator[](unsigned int position) { return const_cast<char&>(static_cast<const sample&>(*this)[position]); } ...; };
- 646 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 23:32:43 ]
- >>645
blogにも書いてあるが、やりすぎな工夫の一例だな
- 647 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 23:44:12 ]
- >>644
どちらかというと、そういう排他制御の仕組みを自分で作るときに使う。 例えば下のコードをコンパイラが最適化した結果、 ロック確保する前や解放した後にhogeへ読み書きするコードが生成されたらシャレにならない。 MS仕様では、volatileなデータに読み書きするとそこを境界として、それより前後に読み書き処理が ずらされないように最適化を抑えると言っている。 void f(hoge_t* hoge) //hogeを使うには排他制御でロックが必要とする { // ... ロック確保 hogeを使う ロック解放 // ... }
- 648 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 23:48:16 ]
- >ロック確保する前や解放した後にhogeへ読み書きするコードが生成されたらシャレにならない。
意味が分からん。 最適化によって、「hogeを使う」に相当するコードが、「ロック確保」の前や「ロック解放」の後に配置されたらシャレにならないってこと?
- 649 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 23:50:52 ]
- >>648
ああ、ごめん。そういうこと。 携帯から打つのが面倒でいろいろ略した。
- 650 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 00:34:14 ]
- >>642
ありがとうございます。探してみます。
- 651 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 00:44:58 ]
- >>645
それ第何版の何節に書いてあるの?
- 652 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 01:30:20 ]
- >>644
そういう用途にも使えるってだけでWindowsでもマルチスレッドでvolatileなんて使わない mutexなりクリティカルセクションなりInterlocked-系関数なり使えばそこでフェンス張られるし (Interlocked-系関数でvolatile使われてるけどね。間接的には使うことになるのかな) やっぱり組み込みとかドライバ以外で使うことはないと思うな
- 653 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 17:24:40 ]
- >>647, >>652
どうも、どうも >>647 >そういう排他制御の仕組みを自分で作るときに使う ずばり、自分でそういう仕組みは作ることないです
- 654 名前:645 mailto:sage [2009/05/31(日) 20:04:50 ]
- >>651
忘れた。 原著第3版に書いてあった。 確か、最初の方の章に。
- 655 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 21:20:51 ]
- 改訂2版にはどこにも書いていないんだが、
第3版には本当に書いてあるのか? 第4版まであと2年はかかりそうな気がするし、 第3版買ってくるか・・・
- 656 名前:645 mailto:sage [2009/05/31(日) 21:28:28 ]
- >>655
第3版には本当に書いてある。 厳密に同じコードかどうが覚えてないが、 const版をnon-const版にて呼び出してconst_castでconst属性を外す という方式であることは本当。 俺もそんなことして良いの!?と思ったから信じられなくても無理はない。
- 657 名前:645 mailto:sage [2009/05/31(日) 21:31:01 ]
- わざわざ引っ張ってきて確かめみた。
原著第3版(日本語翻訳されているもの)で 15ページから始まる項目にある。
- 658 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 21:48:18 ]
- 2版の21項「使えるときは、必ずconstを使おう」に
対応するんじゃないかなと思うけど、 そこではmutableをサポートしてないコンパイラのための苦肉の策として 「みっともないけど」と前置きした上でconst外しをしている。 これのことじゃないよな?
- 659 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 22:06:17 ]
- >>658
じゃないってば。 少しは俺を信じろ(笑) 他の人も誰か証言してくれ。
- 660 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 22:08:18 ]
- ようやっと見つけたが、
さっぱり読めなくて意図が分からん。 books.google.co.jp/books?id=d-2Im_Ox7qMC&pg=PA24&as_brr=3&source=gbs_toc_r&cad=0_0#PPA41,M1 俺の英語力も落ちたな・・・
- 661 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 22:10:32 ]
- ああ、これって王家の血を引く者にしか読めないよ
- 662 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 22:10:40 ]
- >>659
すまんwww 明日買ってくる。
- 663 名前:645 mailto:sage [2009/05/31(日) 22:12:21 ]
- >>660
メンバ関数foo()のconst版とnon-const版の定義が 同じようなものになることは多々あるじゃない。 同じような定義を繰り返し書きたくない、そんなあなたにconst_cast って言うような主旨。 const版をうまく定義することで、non-const版の定義は それを呼び出してconst性を除去するだけ で良くなる。
- 664 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 22:13:17 ]
- >>661
俺読めたw ・・・そろそろ天の啓示が来る頃だろうか。
- 665 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 22:14:26 ]
- >>664
もしかして、お兄様なの! こんなところで巡り合えるなんて。。
- 666 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 22:16:24 ]
- おまえか
しょせん、暇をもてあました神々の遊び
- 667 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 22:20:04 ]
- 理解した。解説thx
感覚的にconst側で非constのコードを 再利用したくなりそうなものだけど それも理由があるのかな。 とりあえず第3版買ってくるよ。 生き別れた妹はいなかった気がするし。
- 668 名前:645 mailto:sage [2009/05/31(日) 22:23:19 ]
- >>667
俺もそう思ったが、 理由としては const側で非constメンバ関数を呼び出すというのはダメ ってことらしい。 たとえ実際にはオブジェクトが変更されないとしても。 まあ買ってくる価値はあるかと。 何てったって名著だし、無駄な出費ではないと思う。
- 669 名前:デフォルトの名無しさん [2009/05/31(日) 22:41:23 ]
- #define UNICODE
#define _UNICODE で定義されたソースコードがあるとします。 それを #define UNICODE #define _UNICODE と定義してはエラーになってしまう、つまりANSI版のソースに混ぜて使いたい場合どの ようにすればいいのでしょうか? たとえば int WINAPI WinMain(…){ …(ANSIソースコード) sub(); } int sub(){ #define UNICODE #define _UNICODE …(UNICODEソースコード) } みたいなことはできるでしょうか?
- 670 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 22:49:30 ]
- できます。
- 671 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 22:52:12 ]
- いまいち質問内容がよく分からんが、
#define UNICODE #define _UNICODE したあと #undef UNICODE #undef _UNICODE すればdefineは消える。 でもWIN32なら、 UNICODE版、ANSI版両方そろってるはずだが。
- 672 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:25:45 ]
- CreateWindow("aaa",....
とかやってるんだろ
- 673 名前:デフォルトの名無しさん [2009/05/31(日) 23:59:32 ]
- >>670 >>671
いやできなかった 結論からいうと 原理からいうとその方法でできるのは確かなんだが UNICODEと_UNICODEは最初の最初で定義しておかなければならならないみたいだ 先にwindows.hとか読み込まれてるからその関係で動作がおかしくなる >>672 アホすぎ てか解決法をいうと単純にソースファイルをわければ解決できる 最初からやればよかったけど
- 674 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 00:14:01 ]
- 本筋とは全く関係ないが、>>669を見ると_tWinMainにしろと言いたくなる。
- 675 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 01:15:41 ]
- もうこれから書くコードは全部_UNICODEでいいかもと思ってしまうがな。
- 676 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 04:06:41 ]
- なに、いいってことよ┏( ^ω^)┛
- 677 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 14:32:49 ]
- 下の様な感じで合成関数を作ろうと思ったのですが、
error C2678: 二項演算子 '*' : 型 'composite_impl<result_type_,arg_type_>' の左オペランドを扱う演算子が見つかりません とエラーが出ます。どうやって回避すればいいのでしょうか?
- 678 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 14:33:55 ]
- struct composite_type{};
template<typename result_type_, typename arg_type_> struct composite_impl{ typedef result_type_ result_type; typedef arg_type_ arg_type; typedef result_type (*fn_type)(arg_type); static fn_type &fn_holder(){ static fn_type fn; return fn; } result_type operator ()(arg_type a) const{ return (fn_holder())(a); } }; template<typename result_type_a_, typename result_type_b_, typename arg_type_b_> struct composite_impl<result_type_a_, composite_impl<result_type_b_, arg_type_b_> >{ typedef result_type_a_ result_type; typedef arg_type_b_ arg_type; typedef result_type (*fn_type)(arg_type); static fn_type &fn_holder(){ static fn_type fn; return fn; } result_type operator ()(arg_type a) const{ return (fn_holder())(composite_impl<result_type_b, arg_type_b_>()(a)); } }; template<typename result_type, typename arg_type> inline composite_impl<result_type, arg_type> operator *(composite_type, result_type (*fn)(arg_type)){ composite_impl<result_type, arg_type> a; a.fn_holder() = fn; return a; } template<typename result_type_a, typename result_type_b, typename arg_type_b> inline composite_impl<result_type_a, composite_impl<result_type_b, arg_type_b> > operator *(composite_impl<result_type_a, result_type_b> a, result_type_b (*fn)(arg_type_b)){ composite_impl<result_type_a, composite_impl<result_type_b, arg_type_b> > a; a.fn_holder() = fn; return a; } composite_type composite; #include <iostream> #include <cstring> int fn_a(int a){ return a * a; } char *fn_b(int a){ static char str[0xFF]; std::sprintf(str, "%d", a + 1); return str; } int main(){ std::cout << (composite * fn_a * fn_b)(2) << std::endl; return 0; }
- 679 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 14:42:39 ]
- >>668
> const側で非constメンバ関数を呼び出すというのはダメ > ってことらしい。 これって、単純にconstメンバ関数内で非constメンバ関数を呼び出すと コンパイルが通らないって話。
- 680 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 15:00:03 ]
- >>679
const_castで*thisからconstを外すって話だよ。
- 681 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 15:12:45 ]
- >>680
あーそういうことね。 でも*thisのconst外しが駄目なのも当たり前の話だな。
- 682 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 20:59:19 ]
- *thisのconstは外してないぜ
むしろconstメンバ関数を呼ぶために*thisにconstを付けてる 外してるのは戻り値のconst
- 683 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 21:04:09 ]
- >>682
>>667-668 >>679-681 を読みかえしくれ。
- 684 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 21:13:26 ]
- ???
>>645のことだろ? static_cast<const sample&>(*this)は明らかに*thisにconstを付けてる 何か間違ってるのか
- 685 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 21:15:12 ]
- >>684
> >>645のことだろ? 否。 >>667-668の事。 それに対し>>679-681というやりとりが行われている。 皆は>>645は理解している。
- 686 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 21:18:48 ]
- なるほど理解した
- 687 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 22:34:32 ]
- いろいろあるよ。
www.sengoku.co.jp/CategoryIndex/wire.htm 個人的には極細より線と鈴メッキ銅線が好きだけど (どうせ趣味だし)、 信頼性からジュンフロン線使う人のほうが多い。 このシリーズのより線はストリッパー必須。 ジュンフロンは苦手です。ええ。
- 688 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 22:36:18 ]
- ご、誤爆・・・
- 689 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 22:43:04 ]
- どんまい、
というかハードとソフト両方いけるとかうらやましい
- 690 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 22:45:09 ]
- >>687
全然 なんだかわからないwww すごいな。
- 691 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 01:02:51 ]
- とりあえずイミフだからストリッパーってあたりに反応しとこうぜ
- 692 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 01:44:25 ]
- ストリッパーくらい分かるだろ
線の被覆を剥ぐための工具だろ
- 693 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 02:19:34 ]
- struct A{A();virtual void fun() = 0;};
struct B:A{B();fun();}; struct C{C(A&b); C problem(A&b);}; C c(B()); c.problem(B()); // no-match function になるのは何故? C::problem(一時オブジェクト参照)を弾くならコンストラクタでも弾くべきだと思うんだけど
- 694 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 02:57:23 ]
- >>692
しらんがな(´・ω・`)
- 695 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 03:51:45 ]
- ドラクエなどで登場する戦士や魔法使いを意味するFighterクラスと Mageクラスがあったとして、
そのクラスのインスタンスが持つHPやMP,攻撃力などのステータス一覧を表示する関数を作るとき、 クラス自信にその関数を持たせるのか、あるいはクラスとは関係のない部分で作るのか、どちらがいいんでしょう? クラス設計の考え方がまったくわかりません・・。
- 696 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 06:17:21 ]
- >>695
その場合はカプセル化を優先する。 まず、HPやMP,攻撃力などのステータスを格納する変数(intだったりstd::size_tだったりするだろう)のアクセス指定子がどう宣言されているかによって考えを分ける。 1. もしprivateで宣言されていて、そのステータスをpublicなメンバ関数h_point()で取得するような仕組みにしている場合(むろんそれが望ましい)は、「クラスとは関係のない部分で作る」が正解。 つまり別の関数show_status(〜)を作り、〜の部分にキャラクタのインスタンスを渡すようにする。 2. もしpublicで宣言されているならば、「クラス自身にその関数を持たせる」ないし「friend指定して外部関数を作る」が正解。しかしステータスを格納する変数がpublic指定されていること自体、そもそも望ましくないことだが。
- 697 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 06:23:39 ]
- >>693
private継承しているからだろ
- 698 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 08:07:42 ]
- >>693
そのコンストラクタで本当に動くか試した?
|

|