1 名前:デフォルトの名無しさん mailto:sage [2013/04/28(日) 17:27:19.70 ] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.83【環境依存OK】 toro.2ch.net/test/read.cgi/tech/1363154865/ ◆ソースのインデントについて 半角空白やTABでのインデントはスレに貼ると無くなります。 そのため、アップローダーに上げるのも手ですが直接貼る場合は、 全角空白か に置換すると見栄えだけはよくなります。 【アップローダー】(質問が長い時はココ使うと便利) codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック) ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)
152 名前:デフォルトの名無しさん mailto:age [2013/05/15(水) 12:29:19.47 ] 派生クラスを複数生成したら 基底クラスも複数生成されるの? 基底クラスは1つ?
153 名前:デフォルトの名無しさん mailto:sage [2013/05/15(水) 12:37:12.77 ] はい
154 名前:デフォルトの名無しさん mailto:sage [2013/05/15(水) 12:59:43.87 ] いやどっちだよw
155 名前:デフォルトの名無しさん mailto:sage [2013/05/15(水) 13:09:10.74 ] もう少し明確にしてくれ。クラスの定義の話かインスタンスの話か?
156 名前:デフォルトの名無しさん mailto:sage [2013/05/15(水) 15:56:34.22 ] クラスの定義が複数生成されるとか嫌過ぎるわ…構文上の規約の問題とメモリの割り当ての理解がごっちゃになってる hppってヘッダーにcppのコード突っ込んでリンカ解決やら楽しようぜ h+cpp だから hpp だカッコいいだろう!! みたいなイメージだ
157 名前:デフォルトの名無しさん mailto:sage [2013/05/15(水) 17:58:27.63 ] >>152 クラスのインスタンスを人間にたとえると 基底クラスの顔と派生クラスの顔 つまり2つの顔を持つ人間が1人生まれる
158 名前:デフォルトの名無しさん mailto:sage [2013/05/15(水) 17:58:48.01 ] 「クラスを生成」はたいていの場合、 発言者は「クラスのインスタンスを 生成」のつもりであることが多い。なので 派生クラスのインスタンスを複数生成したら それぞれに基底クラスのインスタンスが含まれる
159 名前:デフォルトの名無しさん mailto:sage [2013/05/15(水) 18:04:20.08 ] 自己顕示欲マンセー
160 名前:デフォルトの名無しさん mailto:sage [2013/05/15(水) 18:17:38.64 ] 複数の翻訳単位で派生クラス(テンプレートクラス)がインスタンスされた場合、 それぞれの翻訳単位で基底クラスが暗黙にインスタンス化される。 だがODRで一つと見なされるのでインスタンスの数を意識する必要はない。 コンパイル時間を短縮したいならexternでインスタンス化を抑制する
161 名前:デフォルトの名無しさん mailto:sage [2013/05/15(水) 18:44:10.49 ] 基底クラスだけテンプレートを インスタンス化できる? 派生クラスのインスタンス化に 必要不可欠のような
162 名前:デフォルトの名無しさん mailto:sage [2013/05/15(水) 19:49:38.87 ] 基本クラスだけ? 逆?
163 名前:デフォルトの名無しさん mailto:sage [2013/05/15(水) 20:00:26.86 ] 最近hoge厨が静かになって 平穏がおとずれたようだ
164 名前:デフォルトの名無しさん mailto:sage [2013/05/15(水) 20:03:42.01 ] 自治スレか宿題スレに篭っているんでしょう平和が続くといいですね
165 名前:デフォルトの名無しさん mailto:sage [2013/05/15(水) 20:10:12.64 ] hoge使いはUnixerに多い。 つまりUnixerは底辺。 msは底辺以下、 coolなguyはMacを選ぶね
166 名前:デフォルトの名無しさん mailto:sage [2013/05/15(水) 20:28:03.36 ] Macは負け組
167 名前:デフォルトの名無しさん mailto:sage [2013/05/15(水) 20:30:00.84 ] foo bar は?
168 名前:デフォルトの名無しさん mailto:sage [2013/05/15(水) 20:33:57.17 ] Linux:キチガイ、変人が使う MS:馬鹿が使う 林檎:自称かっこいい奴が使う 林檎は芸術家jobsの芸術作品だからな
169 名前:デフォルトの名無しさん mailto:sage [2013/05/15(水) 20:35:44.05 ] どちらかというとマカーに基地外が多い 何でかわからないけどマカーの基地外率は異常
170 名前:デフォルトの名無しさん mailto:sage [2013/05/15(水) 20:42:27.85 ] 継承関係が A -> AA -> AAA の時にAAAのインスタンスを 生成するとAAとAのインスタンスも(見えないけど)生成される。 じゃないとスーパークラスのメソッドを呼び出せない。
171 名前:デフォルトの名無しさん mailto:sage [2013/05/15(水) 20:42:53.09 ] >>169 馬鹿が自称かっこいい奴を見てキチガイいって思うのは 馬鹿だからしょうがない
172 名前:デフォルトの名無しさん mailto:sage [2013/05/15(水) 20:47:16.94 ] >>152 は多重継承の話をしてるんじゃないの?
173 名前:デフォルトの名無しさん mailto:sage [2013/05/15(水) 20:55:25.05 ] Aを継承したB Aを継承したC BとCを継承したD Dのインスタンス中に居るAのインスタンスは単一なのか BにまつわるAのインスタンスと CにまつわるAのインスタンスとの都合2つに分かれるのか こういう話?
174 名前:デフォルトの名無しさん mailto:sage [2013/05/15(水) 20:56:46.04 ] 152の味噌汁
175 名前:152 [2013/05/15(水) 21:19:55.15 ] インスタンスを生成でお願いします
176 名前:デフォルトの名無しさん mailto:sage [2013/05/15(水) 22:54:57.47 ] >>175 派生クラスのインスタンスの数に応じて基底クラスのインスタンスも複数生成される struct X { int a; }; struct Y : X {}; Y y1; Y y2; のとき y1.a と y2.a は別物
177 名前:デフォルトの名無しさん mailto:sage [2013/05/15(水) 23:02:17.63 ] つまんねっ
178 名前:152 [2013/05/15(水) 23:52:15.81 ] すいません書き直します 基底クラスAがあり、そのAの派生クラスBがあり Bのインスタンスを何度も生成した場合 B1とB2の基底クラスインスタンスAは A単体なのかA1、A2と増えていくのかどちらですか?
179 名前:片山博文MZパンク ◆0lBZNi.Q7evd [2013/05/16(木) 00:00:10.27 ] >>178 後者
180 名前:デフォルトの名無しさん mailto:sage [2013/05/16(木) 00:17:06.64 ] B1とB2はいったいどこから出てきたんだ 基底クラスインスタンスなんてわけわからん語を作るな コードを書いて説明しろ
181 名前:デフォルトの名無しさん mailto:sage [2013/05/16(木) 00:18:53.86 ] こういうのが説明力がないっていうんだよな 会社で煙たがられる存在
182 名前:デフォルトの名無しさん mailto:sage [2013/05/16(木) 00:20:36.18 ] 基底クラスインスタンスのメンバ変数を書き換えるようなメソッドを用意して実験したらいいんじゃないかな(エスパー)
183 名前:デフォルトの名無しさん mailto:sage [2013/05/16(木) 01:01:07.62 ] インスタンスの数=newした数(Java風) だから顔の数じゃなくてボディの数で数えろと
184 名前:デフォルトの名無しさん [2013/05/16(木) 01:46:42.40 ] >>180 何度も生成するから 1、2、3、4、5… と増えていくんだよ
185 名前:デフォルトの名無しさん mailto:sage [2013/05/16(木) 07:19:43.02 ] 単体なのか増えていくのか、 質問するより、自分でコード書いた方が早いだろ
186 名前:デフォルトの名無しさん mailto:sage [2013/05/16(木) 09:52:49.32 ] こういうのは入門書でよくやる理解しやすいたとえ話でやるより コード貼ってどうこうしたほうが…そもそも自作自演っぽく思えてきたけど
187 名前:デフォルトの名無しさん mailto:sage [2013/05/16(木) 11:35:44.57 ] たしかにQZはC++の知識がないから QZの自演ってことはありうる
188 名前:デフォルトの名無しさん mailto:sage [2013/05/16(木) 12:25:09.68 ] >>178 結局何を聞きたいのかさっぱりだ
189 名前:デフォルトの名無しさん [2013/05/16(木) 12:34:47.33 ] 派生を生成するために 基底のインスタンスも増えていったらメモリの無駄じゃないの?
190 名前:デフォルトの名無しさん mailto:sage [2013/05/16(木) 12:38:06.02 ] >>189 だったら派生せずに新しくクラスを作ればいいじゃん
191 名前:デフォルトの名無しさん mailto:sage [2013/05/16(木) 12:38:42.93 ] >>189 派生のインスタンスの中に基底のインスタンスに相当する部分が含まれているのでは?
192 名前:デフォルトの名無しさん mailto:sage [2013/05/16(木) 12:40:31.09 ] 継承を一体何だと思ってんだか
193 名前:デフォルトの名無しさん [2013/05/16(木) 12:46:03.41 ] 派生を複数生成しても 基底は1つになる方法はない?
194 名前:デフォルトの名無しさん mailto:sage [2013/05/16(木) 12:48:54.89 ] なんか意味を正しく理解してないのがいそうだからこの流れでは『インスタンス』禁止にしとけ クラスTのインスタンス -> T型の変数 と言い換えとけ
195 名前:デフォルトの名無しさん mailto:sage [2013/05/16(木) 13:19:11.46 ] >>193 継承を使わずに基底にあたる型をshared_ptrとかでメンバに持つクラスにしろ
196 名前:デフォルトの名無しさん mailto:sage [2013/05/16(木) 13:25:38.02 ] >>193 virtual継承
197 名前:デフォルトの名無しさん mailto:sage [2013/05/16(木) 13:38:48.28 ] >>193 is-aとhas-aの違いはわかる?
198 名前:デフォルトの名無しさん mailto:sage [2013/05/16(木) 15:53:31.31 ] 学生は人である 学生を増やしても人のインスタンスが一つになっている状況とは如何に あれか、学生数の水増しかw
199 名前:デフォルトの名無しさん mailto:sage [2013/05/16(木) 16:17:39.82 ] >>193 の中では継承はどういうイメージになってるんだ?
200 名前:デフォルトの名無しさん mailto:sage [2013/05/16(木) 17:01:59.23 ] >>193 派生を使わない。 基本クラスに持たせようとしていた情報は グローバル変数で持つ。 派生クラスに持たせようとしていた情報は単独の クラスにして みんなでグローバル変数をみる
201 名前:デフォルトの名無しさん mailto:sage [2013/05/16(木) 17:04:43.82 ] >>193 コンポジションを使うとか どうしても継承が必要なのか、継承を使わなくてもいいのかはよく検討すべき
202 名前:デフォルトの名無しさん mailto:sage [2013/05/16(木) 18:30:51.59 ] もうAとBとB1とB2を全部 グローバル変数にしようぜ
203 名前:デフォルトの名無しさん mailto:sage [2013/05/17(金) 01:01:04.77 ] 1.const char* a //*aがconst 2.char* const b //bがconst 3.char const* c //1.と同じ?2.と同じ? 4.const char& d //dがconst? 5.char& const e //どこがconst? 6.char const& f //ドカーン! constが分からんとですorz
204 名前:デフォルトの名無しさん mailto:sage [2013/05/17(金) 01:02:41.45 ] >>203 何故自分で試そうとしないのですか?
205 名前:デフォルトの名無しさん mailto:sage [2013/05/17(金) 01:11:23.80 ] >>203 これ見てわからなかったらもう来るなよミジンコ ideone.com/ViHQJy
206 名前:デフォルトの名無しさん mailto:sage [2013/05/17(金) 01:41:05.07 ] くぎゅうぅぅ
207 名前:デフォルトの名無しさん mailto:sage [2013/05/17(金) 01:47:27.57 ] >>203 とりあえずconstは(変数ではなく)型に付くと覚えましょう 1.const char* a //const char型へのポインタ(型)(の変数)a 2.char* const b //char型へのconstポインタ(型)(の変数)b 3.char const* c //1.と同じ 4.const char& d //const char型への参照(型)(の変数)d (※) (※この形を『const参照』と呼びますがconst型への参照(型)の意味であって、型へのconst参照(型)の意味ではありません) 5.char& const e //エラー 6.char const& f //4.と同じ
208 名前:デフォルトの名無しさん mailto:sage [2013/05/17(金) 02:03:39.74 ] constは左隣につく、左側がない場合のみ、例外として右側につく、と覚えてる
209 名前:KUSO KOTE mailto:sage [2013/05/17(金) 02:15:00.69 ] 昔「エキスパートCプログラミング 知られざるCの深層」 というおUNKOな本があって、 型宣言の説明だけは素晴らしかった。 その読解法によると const char* a a is a pointer to "const char" char* const b b is a const pointer to char char const* c c is a pointer to const char (=a) const char& d d is a reference to "const char" char& const e e is a const reference to char→エラー char const& f f is a reference to const char
210 名前:デフォルトの名無しさん mailto:sage [2013/05/17(金) 07:20:10.83 ] >>203 1, 4 は例外的だし意味もあいまいだから「使わない」
211 名前:デフォルトの名無しさん mailto:sage [2013/05/17(金) 07:40:06.86 ] >>210 それぞれ3と6を使うってこと? それならむしろ自分は逆だなあ。
212 名前:デフォルトの名無しさん mailto:sage [2013/05/17(金) 08:52:28.92 ] char const* a は const *a だから、*a がコンスト char* const a は const a だから、a がコンスト って考えると、3, 6は確かに自然な気がする でも、char const& a は const &a だから、&aがコンストかっていうと 何それイミフw って考えると、全然自然じゃない気もする。
213 名前:デフォルトの名無しさん mailto:sage [2013/05/17(金) 09:12:40.30 ] constは ・左側で一番近い ・型に付いて 修飾するというのが基本ルール >>203 の1,4はその基本ルールでは解釈できず>>208 ,210のいうように例外的に解釈しなければならないから不自然 >>212 はconstが右側の、型ではない*aやaや&aに付いてる、という解釈の時点で最初から二重に間違ってる
214 名前:デフォルトの名無しさん mailto:sage [2013/05/17(金) 10:15:43.42 ] なるほどなー。 自分は1,4を使う派だけど、constをどちらの目的で使うかによって、 型名とconstの位置が逆になるので、パッと見て分かりやすいかなー?と思っている。
215 名前:デフォルトの名無しさん mailto:sage [2013/05/17(金) 10:49:49.41 ] >>213 なるほど、てことは const の左側に「が」を補って char const* は char が const char* const は char* が const char const& は char が const char& const は char& が constはイミフだからエラー って考えると自然?
216 名前:デフォルトの名無しさん mailto:sage [2013/05/17(金) 12:03:02.39 ] そんなかんじでいいんじゃない
217 名前:デフォルトの名無しさん mailto:sage [2013/05/17(金) 12:43:38.38 ] 左側にconstは記憶域指定子(static,extern,...)付きの宣言とぱっと見同じ読み方で解釈できて const初見の人でも受け入れやすい形だから便宜的に導入された記法なのかな int a; // int static int a; // なにかついてるけどint extern int a; // なにかついてるけどint const int a; // なにかついてるけどint int const a; // なにかついてるけどconst、・・・?
218 名前:デフォルトの名無しさん mailto:sage [2013/05/17(金) 12:46:15.89 ] >・左側で一番近い 規格の該当個所はよ
219 名前:KUSO KOTE mailto:sage [2013/05/17(金) 15:03:07.06 ] >>217 記憶域指定子は別に左でなくても良いのだけれど ideone.com/k9Lxqm
220 名前:KUSO KOTE mailto:sage [2013/05/17(金) 15:12:14.57 ] URL間違えたoops ideone.com/PAlXVV
221 名前:デフォルトの名無しさん mailto:sage [2013/05/17(金) 15:19:59.33 ] msdn.microsoft.com/ja-jp/library/1b4az623.aspx stringを取得する関数ってこれみたいに参照渡ししてることが多いけど、stringをreturnで返したら駄目なの?
222 名前:KUSO KOTE mailto:sage [2013/05/17(金) 15:31:43.27 ] >>221 昔は右辺値参照が無かったから コピーのオーバーヘッドを避けるために 参照にしていたと思われる。
223 名前:デフォルトの名無しさん mailto:sage [2013/05/17(金) 15:47:36.06 ] やはりマイクロソフトの設計思想かな マイクロソフトは昔から関数を inに対してoutを与えるものでなく 「正否のステータスを返せるサブルーチン」 ととらえているところがある。 だから戻り値は参照渡しで受け取る
224 名前:デフォルトの名無しさん mailto:sage [2013/05/17(金) 15:50:21.95 ] >>221 C++の.NET拡張はスレ違い
225 名前:デフォルトの名無しさん mailto:sage [2013/05/17(金) 16:13:49.70 ] >>224 221はただの例示で本題はstd::stringだからな?
226 名前:デフォルトの名無しさん mailto:sage [2013/05/17(金) 16:22:45.99 ] C++の文字列はJavaみたいはimmutable じゃないからねえ。 わざわざインスタンスを生成するより 使い回す方が自然。
227 名前:デフォルトの名無しさん mailto:sage [2013/05/17(金) 19:52:53.57 ] 今回のconstもだけど、テンプレートやポインタ等の型を コンパイラはどのように構文解析して型を決めるんだ?
228 名前:デフォルトの名無しさん mailto:sage [2013/05/17(金) 22:10:02.07 ] その状況で構文規則的にありえる構文候補を列挙してソースとマッチするものに絞り込んでいくんだがそういう話でなく?
229 名前:デフォルトの名無しさん mailto:sage [2013/05/17(金) 22:14:50.72 ] *で区切られると覚えれば 別に左とか右とかそんなのどうでもいいんだよ
230 名前:KUSO KOTE mailto:sage [2013/05/17(金) 22:20:16.28 ] >>227 1.明らかにシンボル名と思われる所を見つける 2-1.すぐ右に()があれば関数 2-2.すぐ右に[]があれば配列 2-3.すぐ左に&があれば参照 2-4.すぐ左に*または*constがあればポインターまたはconstなポインター 2-5.すぐ左に「型」または「型 const」または「const 型」があれば終わり 3.その 関数の戻り値/配列の要素/参照先/ポインターの差すものは… →2-1に戻って解析を続ける ただし途中に記憶指定子とか入るので適当にがんばる
231 名前:デフォルトの名無しさん mailto:sage [2013/05/17(金) 22:29:30.64 ] くそみそ
232 名前:デフォルトの名無しさん mailto:sage [2013/05/17(金) 22:58:32.42 ] "const"は型の前と後のどちらに置いたほうがよいですか www.libjingu.jp/trans/bs_faq2-j.html#constplacement
233 名前:デフォルトの名無しさん mailto:sage [2013/05/17(金) 23:02:15.59 ] 日本語でも英語でも修飾子や形容詞は名詞の前にあったほうが読みやすいってことか
234 名前:デフォルトの名無しさん mailto:sage [2013/05/18(土) 00:27:47.88 ] 欧米人には>>209 のC/C++表記だとすぐにそのように解釈できるのかな 同様にC/C++の型表記も自然な表記って感じるのか 俺的には、配列は int arr[10]じゃなく int[10] arrがいいだろって 初めのころは思っていたからな。
235 名前:デフォルトの名無しさん mailto:sage [2013/05/18(土) 00:38:49.32 ] Cの文法がint[] a でなくint a[]なのは 使う時の書き方に似せるという 方針だったはず。 だがC++で参照&が登場した際に一貫性を失った。 ハゲは臭いものにフタをするタイプだから 整合性を考えなくて困る。
236 名前:KUSO KOTE mailto:sage [2013/05/18(土) 01:15:59.31 ] >>235 宣言と使用の記述の統一ついては ISO/IEC 9899:1990の時点で既に 宣言 void (*pf)() = f; 使用1 pf(); 使用2 (********pf)(); とか怪しかったような。
237 名前:デフォルトの名無しさん mailto:sage [2013/05/18(土) 01:31:31.65 ] そんなことよりC#でやろうぜ 文法キモイ言語はポイしなさいポイ
238 名前:デフォルトの名無しさん mailto:sage [2013/05/18(土) 08:04:30.10 ] 規格の何番の何ページという話は 規格オタ隔離スレでも作ってそこでやれ 初心者スレなんだよここは
239 名前:デフォルトの名無しさん mailto:sage [2013/05/18(土) 09:20:03.56 ] >>238 いやそのりくつはおかしい
240 名前:デフォルトの名無しさん mailto:sage [2013/05/18(土) 10:14:01.38 ] 有識者が初心者に正しい使用を教える ってよりは、 俺こんなに規格読み込んでるゼーっていう、 自己顕示欲旺盛な人たち同士の会話で、 初心者置いてけぼりなふいんきが 感じられる。
241 名前:デフォルトの名無しさん mailto:sage [2013/05/18(土) 15:22:32.62 ] >>237 C#で済むプログラムしか作らないなら黙ってC#使えばいいんだよ お前がこのスレに居ることが全くの無駄
242 名前:デフォルトの名無しさん mailto:sage [2013/05/18(土) 15:32:38.93 ] >C#で済む この言い回しが勘違いも甚だしい。 「CはC#よりすごいんだ!」的な 自分の中で自分の価値を高めようと 必死なのがよくわかる。
243 名前:デフォルトの名無しさん mailto:sage [2013/05/19(日) 00:45:26.82 ] Cのが速いんだから当たり前
244 名前:デフォルトの名無しさん mailto:sage [2013/05/19(日) 00:52:59.09 ] .NET FrameworkのJITコンパイラの質がどんどん向上してスピードが上がってるんだが セキュリティの更新だけだと思ってるのか?
245 名前:デフォルトの名無しさん mailto:sage [2013/05/19(日) 00:59:54.36 ] より低級な部分の処理には(ryですね、分かります
246 名前:デフォルトの名無しさん mailto:sage [2013/05/19(日) 01:14:04.19 ] そのうちアセンブラを追い越す性能になるかもなw
247 名前:デフォルトの名無しさん mailto:sage [2013/05/19(日) 01:17:53.99 ] >>246 アセンブラ直接弄ると、小数の丸め処理まで制御できるからな…… コンパイラがどこまで解釈できるかの勝負
248 名前:デフォルトの名無しさん mailto:sage [2013/05/19(日) 01:41:00.42 ] >>244 それでもC/C++に比べりゃゴミみたいなもんだよ
249 名前:デフォルトの名無しさん mailto:sage [2013/05/19(日) 02:06:25.95 ] 書き手の技量次第でFAではあるが、平均的なプログラマを前提にすると 手書きアセンブラと今時のC/C++コンパイラってどっちが速いか微妙じゃね?
250 名前:デフォルトの名無しさん mailto:sage [2013/05/19(日) 02:11:20.47 ] アセンブラにしたって速度が要求されるコアな部分だけ使うのが 本来の使い方だからね。
251 名前:デフォルトの名無しさん mailto:sage [2013/05/19(日) 02:17:33.53 ] ぷっ
252 名前:デフォルトの名無しさん mailto:sage [2013/05/19(日) 05:05:15.33 ] 速度って言うけどさあ 細かい動的メモリ確保が 壊滅的におそいじゃんC/C++は。 そういうのを自前でメモリ管理すると 圧倒的に速くはなるんだが VM系のnewの代替としては限界がある。