1 名前:デフォルトの名無しさん [2007/06/03(日) 22:33:55 ] エスケープシーケンスやWin32APIなどの環境依存な物でもOK。 ただしその場合、質問者は必ず、環境を書きましょう。 ※sage禁止です。 【前スレ】 【初心者歓迎】C/C++室 Ver.37【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1178432985/l50 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
560 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 14:02:04 ] ファイルに関するたくさんの情報を保持するクラスを作りたいんですが、 こういう時のメンバ変数はprivateにするのが基本なんですよね? Setは1つで済むとしてもGetはメンバ変数と同じだけ用意するんですか?
561 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 14:16:15 ] >>560 必要に応じて。
562 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 14:30:56 ] >>561 ではこのやり方はおかしくないんですね。 なんかこれならpublicにした方が手っ取り早いなあとか思ったんですが それはダメ!って色んなところで解説されてるので・・・ ありがとうございます。
563 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 14:41:34 ] どういう使い方をするのか知らないけど、publicにしたほうが手っ取り早いと感じるなら クラスじゃなくて構造体を使うとかしたら?
564 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 15:00:11 ] >>562 駄目な理由を考えてみる
565 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 15:17:27 ] クラスにしたのはコンストラクタとデストラクタが使いたかったからです。 このクラスの変数には別のクラスから頻繁にアクセスする必要があって、 こういう場合隠蔽する意味あるのかな〜?と。 かといって全部同じクラスにしちゃうと大きくなりすぎてこれもまた良くないよな・・・ とか思ってなかなか決められないんです。
566 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 15:20:29 ] あ、構造体でもコンストラクタとデストラクタは使えますね。 結局隠蔽すべきかそうでないのかの判断が良く分からないと言うか。
567 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 15:22:57 ] 好きにしろ
568 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 15:28:29 ] >このクラスの変数には別のクラスから頻繁にアクセスする必要があって まずこの設計が間違ってないかどうかを考えるべきだと思う
569 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 15:35:22 ] ですよね。 ちょっと検討しなおします。 ありがとうございました。
570 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 16:54:32 ] 横からなんですけど>>556 さんの質問に関連して、 現在独学でC/C++を勉強中でコンソールプログラムを色々作ってきた後、 GUIを作るのにWin32APIを勉強していて、 山本信雄さんの『はじめてのWindowsプログラミング』を読んだら、 Win32APIをそのまま扱うのは普通しなくてMFCで作る みたいなことが書いてあったから次はMFCと思っていたのですが、 MFCやる利点がないということはこれからどう勉強を進めたら良いですか?
571 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 17:00:38 ] >>570 とりあえず.NETかそうでないほうをやるかで決めては
572 名前:そう思えるかどうかが分岐点 mailto:sage [2007/06/16(土) 17:06:41 ] MFCやればいいじゃん。趣味なら何の問題もないよ。 もう後がないとか、2005EEでできないとか、どうでもいいじゃん。
573 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 17:11:21 ] さすがにMFCはもうやめといたほうがいいだろ。 どうせまだ入り口程度しかやってないんだろ。 だったら早いうちに.Netへ移行しておけ。
574 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 17:15:07 ] >>571 今のスタンダートとしては.NETなのですか? ていうかそうでないほうっていうのが何なのかも分からないですorz >>572 今は趣味ですが大学卒業後プログラマになりたくて勉強しているので 実際に現場で役に立つものを勉強したいのです。
575 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 17:17:10 ] >>573 やはり.NETが良いんですね>< 正直なところ.NETがどんなものか理解してないので今ちょっとググって調べてみます>< ついでにですが、プログラマになるにはそれが出来ていれば大丈夫でしょうか? それともJavaとかも身に付けておいた方が良いのですか?
576 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 17:21:08 ] >>575 プログラマを目指すなら、MFCも.Netも要らない。 現場で使っているものをその場で使えるようになればいい。 その為には、(当たり前の)コミュニケーション能力と(通常よりは高めの)理解力があればいい。 その上で、就職後に努力できるだけの気力を持てる会社に就職してくれ。
577 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 17:21:19 ] プログラマになるなら最低7つは言語を習得しないとダメです。
578 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 17:34:41 ] 下手な言語7つ覚えるよりC++をマスターするほうが遙かに難易度が高い件について
579 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 17:36:31 ] そもそも何を持ってマスターと言うのか? C++0xとかまだ定まっていないというのに
580 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 17:36:53 ] 難易度高くても、C++しかできないとな。 つぶしが利かない。
581 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 17:39:32 ] >>580 C++できたら他の言語なんて楽勝だろ。
582 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 17:41:42 ] 楽勝だったら、7つ覚えておけよw
583 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 17:45:08 ] 仕事で必要になるたびに覚えていけばいい
584 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 17:46:28 ] C++ が分かってれば、Java だの Ruby だの3日あれば使えるようになる。
585 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 17:47:52 ] いやぁ、C++からJavaはちょっと壁があるぞ。 C++言語を覚えただけじゃ、GUIもスレッドもないしな。
586 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 17:49:11 ] さらに言うと、現状javaの案件といえば、サーバーサイドだな。
587 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 17:50:03 ] >>585 でも逆の Java → C++ と違って挫折することはまずないだろ。
588 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 17:51:10 ] それで挫折する人間なら、C++覚える時点で挫折するよ。
589 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 17:59:05 ] GUI は言語の問題じゃなくてライブラリの問題だと思うが。
590 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 18:00:40 ] 言語だけのC言語ベースでイインジャネ? 設計まで絡んだら知らん。
591 名前:デフォルトの名無しさん [2007/06/16(土) 18:01:50 ] reinterpretって何て読むの? ネット辞典で調べてもでてこん。
592 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 18:03:55 ] リインタープリット
593 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 18:12:53 ] 文法だけではプログラマになれないよ。 そもそも質問主は、MFCか.Netかで迷ってるんだよ? それでもライブラリだから論点が外れてるといえるか?
594 名前:デフォルトの名無しさん [2007/06/16(土) 18:17:30 ] 俺から見ればC/C++もJavaも難しいよ、お前らって頭良いんじゃね いまだにfor(A;B;C){...}の判断,処理手順を間違えてるときあるしな。情けないよ for(A;B;C){...}の判断,処理手順で混乱する香具師、手を挙げろ! .ノ イテレータを作成してるときなんかあれ???、あれれれ?、なんで になるときあるニダ
595 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 19:20:14 ] >>594 慣れ。言語に対する慣れだけでなく、プログラミング作業に対する慣れも含んで。
596 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 20:22:02 ] 俺はC++からJavaScript+HTMLをやったんだが。 C#には簡単に移行出来たな。
597 名前:W [2007/06/16(土) 20:25:34 ] JavaScript+HTML
598 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 20:30:12 ] CやC++で a = b = c = d; としたら、段階的に処理を書くと、 a = b = (c = d); //まずcにdが代入される a = (b = c) = d; //次にbにcが代入される (a = b) = c = d; //最後にaにbが代入される と言うことでいいのでしょうか? 詳しく教えてほしいです
599 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 20:34:46 ] a = (b = (c = d)) c=dが行われ,その値がb=でbに代入され,その値がa=でaに代入される
600 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 20:40:25 ] なるほど! わかりやすい説明をありがとうございます!!
601 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 20:43:43 ] HTMLってプログラミング言語?
602 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 20:46:19 ] ・変数がない ・ループ、条件分岐が書けない ・関数も書けない 修飾言語ではあるが、プログラム言語ではないかな
603 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 20:53:07 ] HTMLはマークアップ言語です。
604 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 21:01:38 ] >>602-603 トンです。 上でプログラミング言語と並んで書かれてたから なんかHTMLって特異な言語だけど仲間なのかなぁ…と思ったら コンピュータ言語⊃プログラミング言語,マークアップ言語,・・・,なんですね。
605 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 21:03:45 ] プリコンパイル済みヘッダーを作ったですが デバッグモードではビルドできるのに、リリースにすると error LNK2005: *** は既に ***.obj で定義されています。 というエラーが全部のファイルで発生してしまいます。 これは何故なんでしょうか? 環境はVS2005です
606 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 21:28:39 ] >>605 エラーです
607 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 21:32:24 ] 特異な言語といえばSQLもそうだな。 一応Languageと名前についてるけど、 これをプログラミング言語と呼ぶのは ちょっと抵抗ある。
608 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 21:49:46 ] ストアドとか書けば解るが、あれは十分にプログラム言語としての特徴を備えているような気が
609 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 21:51:48 ] SQLに制御構造をつけたのがストアドじゃないかね
610 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 21:58:45 ] HTMLだってLanguageと名前についてるだろ SQLはプログラミング言語じゃなくて、データベース言語だろ
611 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 21:59:39 ] Languageは「言語」であって「プログラミング言語」ではないからな。
612 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 23:07:19 ] >>594 for(A; B; C) { D } で、 A を処理して、B を判定して、D を実行して、C を実行して、また B を判定して・・・ とか考えるのは効率が悪い。 グルングルンと実行されるみたいな流れを もっとグラフィカルに頭に思い浮かべるのがコツ。 一旦処理の流れを線でつないで紙に書いて、 それを意識するもんだ。
613 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 23:08:18 ] HTML はプログラミング言語じゃなくてマークアップ言語。 TeX あたりだと単なるマークアップ言語と言い切るのは微妙だがな。
614 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 23:56:37 ] SQLがチューリング完全でないことは明白。
615 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 00:22:00 ] 何言ってるの?
616 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 08:02:03 ] わからないなら調べてから聞けよ
617 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 08:07:53 ] あ〜い、とぅいまてぇ〜ん♪
618 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 09:34:26 ] >>602 IEに限って言えば条件がIEのバージョンに限定されるけど条件分岐が使えるっぽ
619 名前:デフォルトの名無しさん [2007/06/17(日) 12:43:27 ] 親クラスのprotectedな変数が、public継承した子クラスでは publicにならずにprotectedなままなのは何故ですか? 親クラスのpublicな変数が、protected継承した子クラスでは protectedになるのに。 publicよりもprotectedの方が強いと理解しておけばよいのでしょうか
620 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 12:46:05 ] そう理解しておけばおk そしてプライベートが最強と
621 名前:デフォルトの名無しさん [2007/06/17(日) 12:55:24 ] >>620 ありがとうございました。 そう理解しときます。
622 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 14:57:34 ] =演算子をオーバーロードするときにthisポインタを戻り値にしてるんですが、 thisポインタを戻り値にしない書き方ってありますか?
623 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 14:58:53 ] ありますよ
624 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 15:01:58 ] それは例えばどういった書き方でしょうか?
625 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 15:03:17 ] >>624 void operator = (...
626 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 15:04:43 ] a = b + c + d;の処理の流れって、 a = (b + c) + d; //まずbにcを加算 a = ((b + c) + d); //次にb+cの値にdを加算 最後に aに代入という流れで理解してよいのでしょうか? 詳しく教えてください。
627 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 15:06:25 ] デバッグ
628 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 15:06:57 ] デバッグする環境がありません・・・すいません。
629 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 15:09:12 ] >>625 マジサンキュー 課題が終わった
630 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 15:10:36 ] >>626 その例はその理解で正しい。 演算の順序は、演算子の優先順位と結合規則によって決まってる。
631 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 15:13:46 ] いや待て、a = b + (c + d)という解釈をしているかも知らん。
632 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 15:28:39 ] c+dを先にやるなら+をオーバーロードしたときに参照を渡せないから b+cが先だろ
633 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 16:40:39 ] >>630 しかし、順序が変更されても結果に影響が出ない範囲でなら 最適化で順序が入れ替えられる可能性はあるな。 ま、結果に影響が出る場合(そういう風にオーバーロードした場合等)は そういうことは絶対にないが(コンパイラにバグでもない限り)。
634 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 16:56:56 ] >>633 コンパイラのバグを前提にして「可能性はある」なんて言うことに何の意味があるのかね?
635 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 17:08:24 ] ??? 誰もそんな事言ってないぞ?
636 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 17:14:59 ] 結果に影響が出ない範囲で入れ替えられても気にする必要は無いな。
637 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 18:18:51 ] a = b() + c() + d(); で、b, c, d の呼び出される順番は未定義だっけ? 結合順と、各項の評価順はまた別の話だよな。
638 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 18:37:07 ] fgetsの使い方で fgets(buf, sizeof(buf), stdin); のような常套句がありますが、これは sizeof(char) が1であることが 前提になっていますよね。もし sizeof(char) が2だったら、読み込む文字数が 想定した数の2倍になってしまうと思うのですが。 こういった書き方は問題ないのでしょうか。
639 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 18:40:16 ] >>638 sizeof(char)は常に1
640 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 18:41:57 ] >>638 sizeof(char)は絶対に1だから安心しる。 ただ関数によっては、バッファのバイト数を与えるのか文字列長を与えるのか 分かりにくい場合があるから、wchar_tを使ってるとちょっと困ることがある。
641 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 18:43:56 ] charが1バイトじゃなくて1バイトの定義がchar?
642 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 18:44:21 ] charは常に1バイト
643 名前:638 mailto:sage [2007/06/17(日) 18:47:09 ] レスありがとうございます。 charが常に1バイトというのは、規格で決まっているのですか?
644 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 18:48:49 ] >>643 決まってる。 ただ、「buf の型が char である」ということに依存しているから、 ここを変更したいと思った場合に変更を要するコードである事は確かだな。
645 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 18:50:14 ] 誤解があるといけないから念のために言うけど、 char が 1 バイトというのは決まってるが、 1 バイトが 8 ビットである保証はない。 1 バイトが 9 ビットの環境もある。
646 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 18:51:29 ] 1バイトのビット数を取得するマクロってありますか?
647 名前:638 mailto:sage [2007/06/17(日) 18:51:48 ] 皆さんありがとうございました。勉強になりました。
648 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 18:57:42 ] アルバイトのヒト数を取得するユニクロってありますか?
649 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 19:19:40 ] >>646 CHAR_BIT
650 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 20:31:59 ] >>637 未定義。iccだとご丁寧に「想定外の呼び出し順序になる可能性がある」と指摘してくれる。
651 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 21:06:51 ] たまにはlimits.hも眺めよう
652 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 21:08:10 ] float.h も眺めようぜ
653 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 21:10:15 ] 眺めすぎて惚れるなよ
654 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 21:21:25 ] やだ・・///
655 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 21:22:24 ] 構造体やクラスを関数内で定義すること、 つまり、以下のようなことがしたいのですが これは規格でできることが保証されていますか? void hoge() { struct hage { ... }; ... }
656 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 21:23:44 ] >>655 C89 の頃から余裕で使える。
657 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 21:26:15 ] ちなみに関数内で関数は定義できません
658 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 21:33:03 ] >>656 ちゃんと規格で決まってるんですか。 知りませんでした。 どうも、ありがとうございます。 >>657 構造体やクラスの静的関数で代用するのが常套句になってますね。
659 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 21:44:49 ] GCC の拡張でよければ関数内関数は使えるんだけどな。確か。
660 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 22:29:53 ] 関数内クラスをテンプレート引数に出来たらなぁ と思うことがある