1 名前:デフォルトの名無しさん mailto:sage [2012/03/16(金) 19:44:28.87 ] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.77【環境依存OK】 toro.2ch.net/test/read.cgi/tech/1323692486/ ◆ソースのインデントについて 半角空白やTABでのインデントはスレに貼ると無くなります。 そのため、アップローダーに上げるのも手ですが直接貼る場合は、 全角空白か に置換すると見栄えだけはよくなります。 【アップローダー】(質問が長い時はココ使うと便利) codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック) ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)
596 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 01:45:02.40 ] >>595 >>592 はC++だよ
597 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 01:48:28.56 ] >>596 そうなんですけど Cでも int**& って書き方自体できたので メソッド中で a[1][1] って書き方でアクセスできれば楽かなって試してみたんですけどダメでした Cで2次元配列扱うのって結構大変なんですね…
598 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 01:52:46.91 ] >Cでも int**& って書き方自体できたので やめてください
599 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 01:56:23.42 ] >>597 コンパイラが a[1][1] を *(a+1 * n + 1) のような計算に変換してくれているので nの部分をコンパイラが認識出来ないとどうしようもない mainの中で書けるのは int a[2][2] という定義が見えているため ↓のように認識させれば a[1][1] のように書けるけど1次元分以外は固定になってしまう ideone.com/vgeLc
600 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 02:09:39.53 ] >>599 なるほどです #define ならできるのはわかるんですけど 配列サイズをちっちゃくしながら再帰的にこのメソッドをよびたいので 変数で可変じゃないと困るんですよね… ちょっとソースが醜くなるけど 一応やりたいことは >>594 でできそうなのでこれでかいてみます 本当にみなさんありがとうございました
601 名前:デフォルトの名無しさん mailto:age [2012/06/07(木) 06:55:51.82 ] C++ class Hoge{ private: int hogehoge; }; このclassをvectorに4つ格納したいのですがどう記述すればいいのでしょうか 型の宣言がわかりません。 vector<Hoge> array(4) これじゃだめなんですか?
602 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 08:21:09.34 ] #include <vector> class Hoge{ private: int hogehoge; }; std::vector<Hoge> array(4);
603 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 20:31:48.34 ] .NETで開発する場合C++/CLIは必須ですか?
604 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 20:45:19.07 ] いいえ
605 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 21:26:18.99 ] >>604 だとするとCLIはいつ使うのですか?
606 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 21:32:22.18 ] >>605 d.hatena.ne.jp/itaro3/20110727/1311716477 これ見て考えろや でもここまでするなら普通にC/C++使えと思う 既存の.NETのリソースを活用したい時だけか
607 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 21:33:34.20 ] >>606 ありがとうございます!!!!!
608 名前:デフォルトの名無しさん mailto:sage [2012/06/08(金) 17:20:14.46 ] 久しぶりにクラスのポインタの配列をnewしようとしたら記述方法が解らず過去のソース漁っちまったぜ 何でこんな記述方法なんだ
609 名前:デフォルトの名無しさん mailto:sage [2012/06/08(金) 17:26:58.79 ] バカ避け
610 名前:デフォルトの名無しさん mailto:sage [2012/06/08(金) 17:43:51.53 ] >>608 勘違いしてたらごめん、普通な記述方法だと思うけどコレと違うの? ideone.com/ZCwKK
611 名前:デフォルトの名無しさん mailto:sage [2012/06/08(金) 19:07:55.41 ] >>610 自明ではないなあ、確かに調べたくなる。 int *p, *q; なのに int* [10];。
612 名前:デフォルトの名無しさん mailto:sage [2012/06/08(金) 19:08:13.99 ] Bjarne Stroustrup氏 インタビュー www.kh.rim.or.jp/~nagamura/misc/stroustrup-interview.html
613 名前:デフォルトの名無しさん mailto:sage [2012/06/08(金) 19:31:09.43 ] そこそこ有名な古文書ですね
614 名前:デフォルトの名無しさん mailto:sage [2012/06/08(金) 20:28:57.23 ] >>611 配列のnewは type* p = new type[n]; なのでクラスのポインタ(type = cls*)なら cls** p = new cls*[n]; まとめて変数を定義する構文は欠陥品みたいなもんだから使わない方がいい 理解云々より「型 変数,変数;」にならない場合があるシンタックスがキモイ
615 名前:デフォルトの名無しさん mailto:sage [2012/06/08(金) 23:18:54.25 ] ポインタ配列は使わずにptr_vector使ってるわ
616 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 00:09:07.32 ] >欠陥品みたいなもん 聞いたことないわ 脳内か?
617 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 01:31:56.33 ] 禿がそんなようなこと言ってた気がする
618 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 06:33:12.18 ] int *p, *q; int* p, q; どっちが意図通りか分かりにくい
619 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 09:22:15.62 ] >>616 C++言語設計者曰く Bjarne Stroustrup's C++ Style and Technique FAQ www2.research.att.com/~bs/bs_faq2.html#whitespace >A ``typical C programmer'' writes ``int *p;'' >A ``typical C++ programmer'' writes ``int* p;'' >... >Stick to one pointer per declaration and always initialize variables and the source of confusion disappears.
620 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 10:32:50.57 ] [C++設計と進化]でもCの宣言シンタクスをdisってるよね。 構文を変えようとしたけどCユーザーの反発とか色々あって放置に決めたっていう。
621 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 11:10:58.17 ] >>618 どっちがどうなのかさっぱりだ 基本Cな俺は上で記述したくなるけど
622 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 12:27:10.29 ] int*をtypedefしたらさらにややこしい
623 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 13:20:15.63 ] いやそこは#define だろ
624 名前: ◆QZaw55cn4c mailto:sage [2012/06/09(土) 13:47:33.95 ] なんでもありの #define は避けれるのであれば避けたほうがいい。
625 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 14:35:41.84 ] コテはアスペとわかっちゃいても ヤッパむかつくな
626 名前: ◆QZaw55cn4c mailto:日常やってるjね。野見祐二love [2012/06/09(土) 15:12:12.59 ] >>625 コードをみせてくれ。話はそれからだ。
627 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 15:46:21.13 ] ナッパむかつくわ
628 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 21:11:59.64 ] ラッパズボン
629 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 21:47:37.67 ] ガッペむかつく
630 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 23:03:37.47 ] charの配列に2バイト文字列が入ってるものをifとかで場合分けしたいんですが、どーしたらいいんでしょう? 別の事情でstring型は使うことができないんです 初歩的な質問ですいませんがよろしくお願いします
631 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 23:14:05.73 ] 正確ではないと思うが、全角文字の1バイト目を探すというのはどうだろう。 0x80〜 とかその辺だった記憶
632 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 23:21:18.75 ] >>631 回答有り難うございます 文字列で場合分けしたいので一文字じゃダメなんです…… でも参考になりました ありがとうございます 別で聞いた所strcmp?とかいうもので解決するそうです もう少し頑張ってみます
633 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 23:59:18.06 ] いや、charの配列を頭から一文字ずつチェックして その2バイト文字列の文字コードでマルチバイト文字の1バイト目であることを示す値が出てくるかどうかで判断するって話だろ
634 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 00:17:31.99 ] なんでそうなるw
635 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 00:24:29.07 ] 3バイト文字列
636 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 05:57:32.60 ] >>630 扱うコードは SJIS? UNICODE?
637 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 06:03:28.19 ] UTF8以外は認めない
638 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 11:41:33.27 ] UTF32でおk
639 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 12:11:18.15 ] Bjarne Stroustrup ってなんて読むの? バカジャネ ストラップ でいいの?
640 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 12:18:44.54 ] Wikiみろ。しかし、一般にはハゲである。
641 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 12:22:38.71 ] びよよん ストローストラップ
642 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 16:57:25.35 ] 初歩的な質問ですがよろしいでしょうか? C++における関数や関数の呼び出しにおける変数の扱いについてです。 関数や関数内にて宣言している静的な変数は、関数を呼び出すたびに実行に必要なメモリ領域を確保しているのでしょうか? 関数、変数ともにstatic、inlineなどがついていない関数を前提とします。
643 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 17:06:46.76 ] >>642 >関数や関数内にて宣言している静的な変数 >関数、変数ともにstatic、inlineなどがついていない 矛盾しとるがや。
644 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 17:34:56.98 ] >>643 すみません つまりこういうことです。 int func() { int var; } ここでのfuncやvarは実行されるたび確保されるのでしょうか?
645 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 17:38:33.59 ] 仕組みを知りたいなら"スタック 自動変数"でぐぐればわかるよ
646 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 17:51:53.23 ] >>645 ありがとうございます。 早速調べさせていただきます。
647 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 18:04:43.04 ] うるせぇ、許可なんか要らないから勝手に調べろよ。
648 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 18:36:02.03 ] ハイハイワロスワロスwwww
649 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 19:02:24.84 ] 許可を求めてない件
650 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 19:17:56.41 ] まぁアスペなんだろ かかわらないほうが吉
651 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 19:40:35.31 ] そもそも確保しなきゃ使えんだろ
652 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 19:51:54.42 ] 最初に確保して使いまわしているとかそんなのも考えていたんじゃないか? そうなると再起関数の部分とかで矛盾が発生するとか考えればわかるけど
653 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 20:03:12.96 ] 静的な変数≠static と思っているあたりもっと根本的なところが
654 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 20:09:06.45 ] Qが最近あちこちのスレでコテ消して暴れているような気がする
655 名前:デフォルトの名無しさん [2012/06/10(日) 21:02:46.39 ] >>653 悪い質問者じゃないんだけどさ・・・ 関数内での変数ってstatic明示的に書かない限りAuto変数だと思っていた kwsk教えてエロい人
656 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 21:05:14.17 ] つまり>>643 だよ
657 名前:デフォルトの名無しさん [2012/06/10(日) 21:12:59.86 ] そういえば、確かに静的変数なのにstaticがついていないのは矛盾している・・・。 ごめんなさい、なにか勘違いしていました。
658 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 01:56:38.09 ] >>654 Qは指パッチンで何でもできるからな。
659 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 03:32:25.29 ] >>654 気のせいだろ?このスレにしてもQにしてはレベルが低い、というかQならとうに知ってるはず。
660 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 03:35:58.64 ] いやQの正体はこんなもんじゃないのかな
661 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 04:59:12.55 ] むしまるQ
662 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 10:25:25.11 ] DQN
663 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 15:13:36.00 ] C++のコンパイラ、IDEは何を使えばいいでしょうか(各コンパイラは主として何が違うのでしょうか) 今のところ、Borland C++ Compiler、BCC Developerを使おうと思っています
664 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 15:30:43.85 ] IDEが決まってから環境(OSとか)を合わせるの?
665 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 15:40:13.46 ] OSはWindowsXPとWin Vistaです 他にも(使用環境について)何か必要でしょうか?
666 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 15:55:48.00 ] Visual C++ 2010 Express でいいんじゃね
667 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 16:33:13.06 ] フリーのやつ全部試せ 無駄にはならん
668 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 16:46:17.50 ] LSI C 3.30試食版
669 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 17:03:17.01 ] Borland C++ Compilerはクソ古い上に公式が消滅してるし Linuxメインでない限りmingw,cygwin使うのはアホだし VC++除けば Digital Mars C/C++ Compilerくらいか?
670 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 18:56:50.56 ] 用途というか、目的によって違うと思う。 簡単なWindowsアプリをお手軽に作ってみたいというならVC++で良いと思う。 C言語を純粋に勉強したいというなら、gcc(Mingw,cygwin)+eclipse(CDT)の方が良いと思う。 VC++のなんとなく嫌な所はC言語としては、Microsoftの方言があると思える所。 GCCの嫌な所は、Windowsアプリを作るのが面倒くさい(という印象)がある所。 「Windowsのアプリを作り易い」ということは、「WindowsのAPIを簡単に使える」という話だから、 C言語の本体とは直接関係ないけどね。
671 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 19:53:51.53 ] C++だって言ってるだろ
672 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 20:01:11.29 ] じゃあ、C言語をC++言語に、そして、gccをg++に、読み替えてください。
673 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 21:01:39.16 ] VC++のCに方言(っていうか、独自拡張?)なんてあったっけ? C++は規格合致してない方言まみれだけど Cは89のままで止まってて、かなり素直だと思うんだけど^^; むしろ99の機能を一部取り入れてるgccの方が独自拡張多くない?
674 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 21:26:55.49 ] 追加仕様はGCCが未対応はVCが多いイメージ
675 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 21:30:58.92 ] >>673 msdn.microsoft.com/ja-jp/library/34h23df8.aspx
676 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 21:34:19.97 ] __declspec(selectany) 便利だよね
677 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 21:54:35.82 ] gccもVC++も色々拡張があるんだね、知らなかった www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/gccextend.html
678 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 22:15:19.79 ] >>677 ふーん、古いページだけれどもその当時の時点でいろいろあったんだ。 >配列変数をコピーする。 は標準じゃなかったっけ。
679 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 22:41:43.30 ] お前構造体と勘違いしてんじゃね
680 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 23:00:20.26 ] 配列コピーはGCC拡張だったけど今やるとエラーになる 今の一覧はこれ gcc.gnu.org/onlinedocs/gcc/C-Extensions.html gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Extensions.html
681 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 23:15:12.86 ] >>679 そだった。なるほど。
682 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 23:20:40.95 ] 配列なんてここ数年使ったときねーな
683 名前:デフォルトの名無しさん mailto:sage [2012/06/12(火) 03:10:00.73 ] std::arrayが使えるようになってまた使い出した
684 名前:デフォルトの名無しさん mailto:sage [2012/06/12(火) 07:10:39.82 ] 独自のものには__が付いてるから許容範囲
685 名前:663 mailto:sage [2012/06/13(水) 14:20:05.80 ] レスしてくれた方々ありがとうございます。返信遅れてすみません まずはVisual C++ 2010 Express使ってみて 不満があるようならg++など順番に変えていこうと思います (cygwinのインストールはしているのですが、使い方があまり分かっていないので勉強する必要が・・・)
686 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 12:47:46.33 ] std::ostreamってWindows CEでも使える?
687 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 15:15:04.81 ] 試したら?
688 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 19:47:41.13 ] C++で、外部の.exeファイルを実行するにはどうすればいいですか? 使っているソフトはVS2010です
689 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 20:00:18.12 ] ExecuteExternExeFile
690 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 20:01:49.08 ] >>688 普通の起動 CreateProcess エクスプローラーと同じようにファイルを開く場合 ShellExecute コマンド実行(起動したプロセスが終わるまで待機) system msdn.microsoft.com/ja-jp/library/277bwbdz (v=vs.71).aspx
691 名前:デフォルトの名無しさん mailto:age [2012/06/14(木) 23:11:18.71 ] #include <iostream> #include <string> using namespace std; int main() { string str; while(1) { cin >> str; if(str=="end") break; cout << str.size; } return 0; } これエラーが出るんですがstrの要素数を出力する場合どう書けばいいんですか? VC++2008です。
692 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 23:46:53.91 ] size → size() ideone.com/YBuvr
693 名前:デフォルトの名無しさん mailto:sage [2012/06/15(金) 06:19:36.46 ] 韓国の国内総生産(GDP)を考慮した個人負債規模が財政危機に陥っているスペイン並みに深刻な水準となった。 個人負債の増加速度は経済協力開発機構(OECD)加盟国で3位と平均を大きく上回った。 大韓商工会議所が14日に発表した「個人負債現況と政策課題」報告書によると、 2010年の韓国のGDPに対する個人負債の比率は81%でOECD平均の73%より高かった。 これは財政危機を陥っているスペインの85%に迫る水準だ。ギリシャの61%より20ポイント高い数値だ。 個人負債増加幅も急速に拡大していうる。2006年以後鈍化した個人負債増加率は2010年に前年比2.4ポイント上昇の9.8%を記録した。 【今日の感想】この記事を読んで・・・ 面白い (40件) 悲しい (2件) すっきり (1件) 腹立つ (0件) 役に立つ (6件) japanese.joins.com/article/707/153707.html?servcode=300§code=300
694 名前:デフォルトの名無しさん mailto:sage [2012/06/15(金) 07:00:42.74 ] 面白い 役に立つ
695 名前:デフォルトの名無しさん mailto:sage [2012/06/15(金) 19:56:02.03 ] .うん 日本人も他人の事言えないね。 【今日の感想】この記事を読んで・・・ 面白い (349件) 悲しい (19件) すっきり (44件) 腹立つ (4件) 役に立つ (36件)..
696 名前:デフォルトの名無しさん mailto:sage [2012/06/16(土) 06:09:17.53 ] 朝鮮人の嫌がらせにも マニフェストをなにも守れない民主党の嫌がらせにも 耐え忍ぶ民族
697 名前:デフォルトの名無しさん [2012/06/17(日) 06:24:34.95 ] class tree { public: tree* right; template <tree* tree::*right> void func1(tree* t) { tree *p = t->*right; } }; こんなクラスを作ってコンパイルすると以下のようなエラーになります。 test.cpp: In member function ‘void tree::func1(tree*)’: test.cpp:7: error: ‘((tree*)this)->tree::right’ cannot be used as a member pointer, since it is of type‘tree*’ func1をfriend関数にするとコンパイルが通るのですが、メンバー関数にすると通りません。 どこがまちがってるでしょうか?
698 名前:デフォルトの名無しさん mailto:sage [2012/06/17(日) 11:01:04.58 ] func1の中のrightがテンプレート引数でなくtreeのメンバのrightとみなされてる
699 名前:デフォルトの名無しさん [2012/06/17(日) 19:06:53.96 ] なるほど、テンプレート引数名とメンバ名がかぶってたと。 テンプレート引数を変更したらコンパイル通りました。 ありがとうございました。
700 名前:デフォルトの名無しさん mailto:age [2012/06/19(火) 05:42:11.94 ] C++にはrubyのsuperみたいな予約語はないのでしょうか?
701 名前:デフォルトの名無しさん mailto:sage [2012/06/19(火) 05:46:13.06 ] 基底クラスのメンバ呼びたいとかなら 規定クラス名::func() で呼べるよ
702 名前:デフォルトの名無しさん mailto:sage [2012/06/19(火) 06:38:25.59 ] __super
703 名前: ◆QZaw55cn4c mailto:sage [2012/06/19(火) 07:08:52.15 ] >>700 ないのでは。C++では派生クラスのコンストラクタから基底クラスのコンストラクタへの綱渡りは基本できなかったと思う。
704 名前: ◆QZaw55cn4c mailto:sage [2012/06/19(火) 07:10:00.84 ] ああ、いいかたがわるかった。綱渡りのための宣言はあったね。ただ super はない。
705 名前:デフォルトの名無しさん mailto:sage [2012/06/19(火) 10:49:09.38 ] たじる継承の時、superではどっち呼びたいのかわからんからなー。 あ、もともとメンバ名の衝突がある時点でだめか。
706 名前:デフォルトの名無しさん mailto:sage [2012/06/19(火) 13:35:14.84 ] たじる継承するにはどうしたらいいですか?
707 名前:デフォルトの名無しさん mailto:sage [2012/06/19(火) 14:37:25.62 ] まず服をたじます
708 名前:デフォルトの名無しさん mailto:sage [2012/06/19(火) 15:35:42.57 ] タジン鍋つかうあれか
709 名前:デフォルトの名無しさん mailto:sage [2012/06/19(火) 16:27:25.98 ] たじってしまいました。 どうしますか?
710 名前:デフォルトの名無しさん mailto:sage [2012/06/19(火) 16:35:01.47 ] 味噌と醤油どちらをメインにするか決めずに他汁継承すると大変な鍋になります
711 名前:デフォルトの名無しさん mailto:sage [2012/06/19(火) 17:32:54.82 ] 更にそこに塩の配列を確保します。
712 名前:デフォルトの名無しさん mailto:sage [2012/06/19(火) 17:35:05.28 ] 塩基配列か!
713 名前:デフォルトの名無しさん mailto:sage [2012/06/19(火) 17:38:03.73 ] するとあら不思議!!
714 名前:デフォルトの名無しさん mailto:sage [2012/06/19(火) 17:39:34.30 ] 多汁した汁が鍋から漏れ出し(リーク)します。
715 名前:デフォルトの名無しさん mailto:sage [2012/06/19(火) 17:41:38.83 ] ぶたじる継承・完
716 名前:デフォルトの名無しさん mailto:sage [2012/06/19(火) 17:42:50.23 ] BADENDじゃねぇか!!!
717 名前:デフォルトの名無しさん mailto:sage [2012/06/19(火) 17:52:09.79 ] ぶたじる継承・第二章 親父の豚汁店を継ぐことを固く決意した主人公。 奇跡とも言われた味を守り抜くことはできるのか。
718 名前:デフォルトの名無しさん mailto:sage [2012/06/19(火) 17:54:05.22 ] 魔王がカレールーを持って現れた!! どうする豚汁!?
719 名前:デフォルトの名無しさん mailto:sage [2012/06/19(火) 19:04:58.99 ] >>489-490 ほじくりかえして申し訳ないんだけど、callocってなんかまずいの?
720 名前: ◆QZaw55cn4c mailto:sage [2012/06/19(火) 19:07:12.07 ] >>719 別に問題ないでしょう。わざわざ0クリアをした領域の上に、なにか別の内容をあらためて代入する、という無駄な動きにめをつぶるのであれば。
721 名前:デフォルトの名無しさん mailto:sage [2012/06/19(火) 19:12:58.27 ] うお、即レスども。 その特定の状況のみを考えて>>490 を書いたってことね。どもです。
722 名前:デフォルトの名無しさん mailto:age [2012/06/20(水) 00:05:49.51 ] class Base { }; class Suba : public Base { }; class Subb : public Base { }; Suba g_scene このあとg_sceneの型をSubbに変更するといったことはできるのでしょうか? できるなら書き方の例もお願いします
723 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 00:25:14.27 ] ごり押しならな・・・・ Subb b = (*reinterpret_cast<Subb*>(reinterpret_cast<void*>(&g_scene))); ただこんなことするプログラマーとはあまり関わり合いたくないレベル
724 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 00:29:02.27 ] せめてvoid*を介した変換にはstatic_cast使ってくれ
725 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 00:32:04.21 ] そんなのどっちでもいいだろ('A`) 普段もこれからもこんなの書かねぇんだから そもそもLPVOIDは特殊だがポインタのキャストなんだからreinterpret_castでも問題ないんじゃねぇの?
726 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 01:04:27.18 ] それ以前にこんなウンコードだれが使うんだよwwww
727 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 01:18:06.44 ] そもそもreinterpret_cast使うんだったらvoid*使う必要ない
728 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 01:54:06.08 ] キャストの使い分けよくわかってないやつ多いからなあ
729 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 03:30:37.91 ] というかC++のキャスト周りで使っているやつみねぇえw Cキャスト使っている奴ばっかだわw
730 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 04:20:06.18 ] それってお前が居る環境が糞ってだけじゃねーか
731 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 06:31:49.68 ] すんません(´・ω・`)
732 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 06:33:40.41 ] >>722 >Suba g_scene; こう書かずに Base *scene; こう宣言すれば?Baseが必要なメンバーを網羅した抽象化クラスなら問題ない。 Base *scene; Suba a; Subb b; scene = &a; scene = &b; 基本的にはこんな感じで差し替えてやればいい。もし、Suba、Subb固有の操作が したいなら、そこだけsceneを使わずaとbを直接参照して操作する。 間違ってもダウンキャストしちゃだめよ。
733 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 09:23:49.61 ] class ABC{}; std::vector<ABC*> xyz; void erase(void) { while(xyz.empty()){ delete *(xyz.begin()); xyz.erase(xyz.begin()); } } vectorの要素を解放するコードは、これ以上短くなりますか? または、もっと簡潔に記述出来ますでしょうか?
734 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 09:25:47.55 ] >>733 > while(xyz.empty()){ じゃなく、 > while(!xyz.empty()){ でした、済みません。
735 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 09:46:26.78 ] std::for_each(xyz.begin(), xyz.end(), [](ABC* p) { delete p; }); xyz.clear();
736 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 10:35:51.68 ] C++11だったら std::vector<std::unique_ptr<ABC>> だろJK
737 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 10:47:50.02 ] >>735 ありがとうございます、勉強になりました。 >>736 じゃないのです。
738 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 12:22:00.38 ] どうしてboost::ptr_vectorを使わないのか
739 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 12:28:09.53 ] 依存をstd::に留めたい人も割りと居る
740 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 12:42:32.69 ] どの場面でもboostが許されている訳ではない。
741 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 13:55:11.46 ] 処で、>735はC++11? だとしたら>733はC++05(だっけ?)の範囲では妥当解?
742 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 14:42:02.22 ] 全部消すなら一々eraseするより 後でclearのほうが効率が良いと思う一応
743 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 14:43:53.32 ] コードの短かさだけで言えばそうかもしれんが 先頭から一つずつeraseとか無いわ 普通にforでdeleteしてclearか、せめて最後の要素からでないと
744 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 14:45:00.27 ] >>743 は>>741 宛
745 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 16:08:17.04 ] それ以前 無条件にdelete出来るポインタをvectorに格納する意味が判らん
746 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 16:30:53.64 ] >>733 >>741 backとpop_backでもっと短く,速くなる ideone.com/zQdD0 4.1秒 while(!xyz.empty()){ delete *xyz.begin(); xyz.erase(xyz.begin()); } ideone.com/R92Ik 0.02秒 while(!xyz.empty()){ delete xyz.back(); xyz.pop_back(); }
747 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 17:22:39.84 ] >>745 わからないならクチを挟むな
748 名前:741(≠733) mailto:sage [2012/06/20(水) 17:28:45.94 ] >742-746 なるほどね。勉強になったよ。THX!
749 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 17:46:17.97 ] >>748 もしデストラクタでの処分方法を考えていたのなら、eraseなりclearなりは要らないと思う
750 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 18:00:47.01 ] for_eachやfor(...;++it)ならな
751 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 18:01:48.71 ] ああ、そうそう、そこが抜けてたごめん。
752 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 19:22:51.40 ] クラス→(継承)→サブクラス→(継承)サブサブクラス とした場合サブサブクラスやサブクラスやクラスの引数なしのコンストラクタって全部動きますか?
753 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 19:26:11.48 ] 当たり前だ
754 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 19:27:30.65 ] >>753 ありがあとう
755 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 19:32:31.05 ] デストラクタにvirtualついてなくて乙ることはあるが コンストラクタですっとばしは考えらん
756 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 19:36:30.29 ] らんらんるー♪
757 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 20:18:42.52 ] 基底クラスにキャストしたサブクラスの仮想関数を呼び出すと 基底クラスのメソッドとサブクラスのメソッドのどちらが呼び出されますか? サブクラスのメソッドが呼び出されるとした場合、 サブクラスのフィールドを仮想関数で弄ることはできますか? アップキャストして基底クラスの状態でまとめたもの(配列)を、 ループで一気に仮想関数を呼ぶことで多種類のサブクラスそれぞれに異なる処理をさせたいです。
758 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 20:25:00.65 ] 何の為の仮想関数なのかわかってないな
759 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 20:29:36.12 ] 仮想関数なんだからどっちが呼ばれるなんて一目瞭然
760 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 20:32:12.85 ] >>758 すいません、解説サイトがよくわからなくて・・ >>759 つまり・・・!?
761 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 20:35:33.10 ] >>760 ttp://www5c.biglobe.ne.jp/~ecb/cpp/06_07.html これ見ればどっちが呼ばれるかわかるだろ
762 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 20:49:52.24 ] >>757 > 仮想関数を呼ぶことで多種類のサブクラスそれぞれに異なる処理をさせたい それこそが多態性
763 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 20:53:24.55 ] 仮想関数と言いながら、メソッドとも呼ぶ・・・ メッセージ機能ないんだから関数で通せよ
764 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 20:54:44.78 ] メゾットなんていわねーよ メンバ関数だろ
765 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 20:54:53.86 ] >>761 おお、サブクラスのメソッドが呼ばれるってことですね ありがとうございます!
766 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 20:58:44.34 ] >>763 すいません
767 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 21:06:54.73 ] メゾットって誰?
768 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 21:07:38.92 ] リゾット
769 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 21:13:40.50 ] Metzod : (独) メゾッド 特に強くを意味する言葉。 日本ではメッゾフォルテなどが有名。
770 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 21:14:52.08 ] Matzとではどっちが強いですか?
771 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 21:15:22.00 ] Matzは全角英数字で殴り続けると死ぬ
772 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 21:16:08.10 ] その綴りなら読みは メツォット だろ?
773 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 21:17:18.74 ] いやメトゾッドだ
774 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 21:19:17.74 ] zeit ツァイト
775 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 21:19:56.51 ] tはノイズだ 正しくはMezod
776 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 21:21:09.47 ] それならやっぱりメツォット
777 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 21:39:45.20 ] ↑おまえの負けー
778 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 21:44:41.05 ] ↑↑↓↓←→←→BA
779 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 21:47:07.13 ] ティリティリティ〜♪
780 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 21:51:50.84 ] ドイツ語でメゾッドと読ませたいならmesodだ
781 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 22:01:20.13 ] メソッドもサブクラスもフィールドもC++の標準用語じゃないでしょでしょ 多分C#辺りから渡ってきた人。
782 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 22:06:59.27 ] 英語でどう呼ぶか、だな
783 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 22:32:59.33 ] Member Functionは、流用元となったSimulaのMember Procedureに準じた言葉。 Methodは、SimulaのMember Procedureに対し、MessageとMethodが分離されていて 別物であることを強調したSmalltalkとObjective-Cの用語。 近頃の言語は、そういう背景を踏まえずにMember Procedureと変わらんものを Method, Methodと連呼する。ちゃんとMessageを実装している言語に失礼だよね。
784 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 22:53:38.10 ] 勉強になります
785 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 22:58:42.38 ] 言語の背景でプログラム書くわけじゃない
786 名前:デフォルトの名無しさん mailto:sage [2012/06/21(木) 00:25:00.59 ] プロセジャーとか言い出す講師にあたったときはひどかった
787 名前:デフォルトの名無しさん mailto:sage [2012/06/21(木) 05:51:46.07 ] 「プロセージャですよね?」と聞き返すべき
788 名前:デフォルトの名無しさん [2012/06/21(木) 08:19:27.01 ] AVL木と、何にもしてないただの木をC++で実装して、大量のランダムデータをinsertしてremoveする、というのの速度を比較したんですが、 データが500万件を越えたあたりでAVLの方が速く終わるようになりました。 insertくらいは普通の木が常に速いと思ったのに。これって正しいですか?
789 名前:デフォルトの名無しさん mailto:sage [2012/06/21(木) 08:36:09.84 ] >>786 プログラムをプラム、プロシージャをプロセ、アセンブラをアセムって呼ぶ ICEベンダーの技術者よりはましだと思う。
790 名前:デフォルトの名無しさん mailto:sage [2012/06/21(木) 10:01:50.95 ] あらゆる主要板にスレッド立てられてますなあ こりゃアフィにも広まるし 完全に日テレはネットに嫌われるね ■モ娘(狼) 日テレ韓国マンセーで遂にGP帯オール一桁wwwwwwwwww hayabusa3.2ch.net/test/read.cgi/morningcoffee/1335226115/ ■ニュー速(嫌儲) 最近フジより韓流ゴリ押しの酷い日テレ GP帯(19〜23時)視聴率オール一桁達成 engawa.2ch.net/test/read.cgi/poverty/1335228771/ 【フジ・日テレ死亡】テレビ朝日視聴率3冠おめでとうございます engawa.2ch.net/test/read.cgi/poverty/1340233396/ ■ニュース速報 【第二のフジテレビ】日テレ、韓流ゴリ押しで大爆死 engawa.2ch.net/test/read.cgi/news/1335230981/ ■なんでも実況J 【朗報】韓流ゴリ押しの日テレが低視聴率 hayabusa.2ch.net/test/read.cgi/livejupiter/1335229538/
791 名前:デフォルトの名無しさん mailto:sage [2012/06/22(金) 00:36:20.43 ] State/Strategyパターンや関数ポインタテーブルを使い、動的に呼び出し先を変えるとする。 どうしてもその呼び出し先ごとに異なる変数を与えたい場合、 適当な変数を用意して代入し、呼び出し先で解釈してもらうという手法はアリ? 例えば変数hogeを用意しておいて、Foo(int hoge) と Bar(int hoge) とでは、hogeの意味(使用目的)が異なるとか。
792 名前: ◆QZaw55cn4c mailto:sage [2012/06/22(金) 01:57:49.23 ] >>791 関数ポインタテーブルでごにょごにょ、ならばやったことありますが、十分にありだと思います。 テーブルに載せてる関数のなかで一番たくさん引数をもつものにプロトタイプをあわせていました、泥臭いけど。 宿題スレでやってcodepad にもあげたけれどもみつけられかったごめんなさい。
793 名前:デフォルトの名無しさん mailto:sage [2012/06/22(金) 02:00:40.61 ] >>791 ナシ 呼び出し先によって意味が変わるんじゃ呼び出し側で意味を持たせた引数を指定できない int f1(int i, int j) { static int v[5] = { 1, 2, 4, 8, 16 }; return v[i] + v[j]; } int f2(int i, int j) { return i / j; } int main() { int (*pf)(int, int) = 0; // pf(1, 0); // f2が呼ばれるならアウト // pf(9, 3); // f1が呼ばれるならアウト }
794 名前:デフォルトの名無しさん mailto:sage [2012/06/22(金) 02:04:08.51 ] 状態遷移がわかっていて、引数変える分には、ハマることはないような
795 名前:791 mailto:sage [2012/06/22(金) 02:58:37.43 ] >>792-794 ありがとう。意見は割れるかあ。 便利だけど、危険性が伴うからホントどうしようかなと悩んでた。 そりゃ0除算や配列の外側へのアクセスなんかは、数値の範囲チェックをすれば良いだろうけど、 それでも心理的要因などが原因ではまる可能性はあるからなあ。 ぶっちゃけ使ってて気持ち悪いというのが大きいがw 関数ポインタじゃなくてクラスを利用しているなら、キャストを使うことも出来るだろうけど、 それをテーブル等に収めようとすると結局同じ問題が発生するんだよね。 うーん、mapで持たせたほうがスマートかなあ?
796 名前:デフォルトの名無しさん mailto:sage [2012/06/22(金) 03:21:50.32 ] 書いてみて試行錯誤するしか わかってるなら、矛盾した箇所とか出てくるだろうから、そこをどうするかでしょ
797 名前:デフォルトの名無しさん mailto:sage [2012/06/22(金) 06:55:44.09 ] >>791 オブジェクトで実装するのであれば無し。 そもそも、ステートオブジェクトに外から関数の引数で値を渡すんじゃなく、 関数が呼ばれたタイミングでステートオブジェクトに情報を取得させればいい。 情報の取得元は、ステート開始以前にコンストラクターとかであらかじめ指定してやる。 StateA state1( &source1 ); StateB state2( &source1 ); StateC state3( &source2 ); state1.ChangeNextState( &state2 ); state2.ChangeNextState( &state3 ); state3.ChangeNextState( &state1 ); next_state = &state1; while( next_state ) next_state = next_state->Execute();