- 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 としました。
- 396 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 04:40:16 ]
- class B;
class A { ... B conv(); ... }; class B { ... }; B A::conv() { return B(...); }
- 397 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 04:45:07 ]
- >>395
>>396 ありがとうございます。
- 398 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 05:36:49 ]
- complexは実数、虚数にreal()、imag()でアクセスするわけですが、
この関数って参照返すだけだから、 それだったら内部の実数、虚数変数に直接アクセスした方が関数呼び出し無い分早いだろうし、 ソースコードも見やすく(多分)なると思うのですが、 これには何か理由があるのでしょうか?
- 399 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 08:12:11 ]
- ja.wikipedia.org/wiki/%E3%83%87%E3%83%BC%E3%82%BF%E6%8A%BD%E8%B1%A1%E5%8C%96
- 400 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 10:53:54 ]
- >>398
基本的に内部の実装に触れられるようにしちゃうと いざインターフェースは変わらないが実装が変わるような仕様変更をするときに 悲劇がおこるからとか。
- 401 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 14:06:24 ]
- あと、関数呼出のオーバーヘッドなんてないと思っていいよ。
それくらいコンパイラの最適化でいともたやすく消え去るられる。
- 402 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 14:11:10 ]
- そんなことはない
だったらなぜわざわざinlineなんて予約語が用意されてるんだ? 関数呼び出しを減らすのは高速化の基本のキだ ウソを教えるのはやめろ
- 403 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 14:15:36 ]
- >>402 の年齢が気になる
- 404 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 14:15:42 ]
- 現在は なんでもかんでもゲッタセッタ教 の勢が強いから
狂信者の戯言は聞き流して己が道を進めばいいと思うよ
- 405 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 14:20:59 ]
- 下駄雪駄教徒だって、下駄雪駄は基本的にインライン関数にするだろう
アウトラインの下駄雪駄なんておぞましいものは狂信者でも書くわけがない 少なくとも長いループ内では、アウトライン関数を呼んではいけない これは今も重要なガイドラインだ
- 406 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 15:01:18 ]
- 少なくともC++でフィールド変数直接アクセスするのは
百害あって一利なしだな。 >>402 >>401が言ってるのはreal/imagの話だろ。 言葉足らずならそう指摘すればいいのに。力抜けよ。
- 407 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 15:05:37 ]
- ja.wikipedia.org/wiki/%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89_(%E8%A8%88%E7%AE%97%E6%A9%9F%E7%A7%91%E5%AD%A6)
下の方のアクセサの項目
- 408 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 15:06:24 ]
- せったげったって言うけどさ
hoge.hage.foo.bar.set_value(0); とかはあったとしても hoge.get_hage().get_foo().get_bar().set_value(0); なんてことはしないよね この辺みんなどうしてるんだろ。 hage や foo は public なメンバにするよね?でもそれだと統一感ないよね?
- 409 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 15:08:19 ]
- どっちもねーよ
- 410 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 15:12:41 ]
- データ主体なものは構造体にしている
メンバ関数はコンストラクタ、コピー、シライライズ、ダンプ、アサートぐらいしか定義しない それと同じ目的の変数は構造体にまとめる class A
- 411 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 15:15:28 ]
- 途中で送ってしまったぜ
後ろの段落は class の中で struct xxx_param とか struct xxx_item, xxx_state とかを定義して まとめてあつかう
- 412 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 15:18:06 ]
- おなじくどっちもねーよ
> hoge.hage.foo この辺までですでに内部状態の一貫性を壊していると思われ(setの場合)。 設計が悪いから作り直せ。
- 413 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 15:38:47 ]
- え?でもさ、よくしらないけど、フォームアプリなんて
System.Form.SetValue() みたいにどんどん深くなっていってない? 実モデルでたとえても、例えば 部屋A.本棚B.本C.ページD.GetText(); みたいな例は十分にありえるんじゃないの?
- 414 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 15:39:02 ]
- >>402は今でもregisterを使っているのだろうか。
- 415 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 16:02:00 ]
- せめてこうだろ
void foo::set_bar_value(int n) { bar.set_value(n); } void hage::set_bar_value(int n) { foo.set_bar_value(n); } void hoge::set_bar_value(int n) { hage.set_bar_value(n); } hoge.set_bar_value(0); 俺はvector3やmatrix44みたいなのは公開してるなあ。 あとは、クラスとして独立させるほどでもないが、関連のあるメンバ変数をグループ化したいときに structを使ってる。
- 416 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 16:05:06 ]
- >>413
System.Form.SetValue() どこのC#? あとそれ名前空間と混ざってるから。
- 417 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 16:13:50 ]
- でも名前空間って要するに全メンバがpublic静的なクラスのことだろ
- 418 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 16:21:41 ]
- >>415
それはない
- 419 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 16:38:05 ]
- しょぼい設計でなければ
名前空間で内部状態を壊されることはないから問題ない。
- 420 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 17:11:46 ]
- class A{
B* get(); } というクラスで、get()メソッドをインライン関数にしたい テンプレートクラスと同様に同じヘッダファイルに実装を書く場合、 inline B* A::get(){ コード } の「inline」は意味があるのでしょうか?
- 421 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 17:15:11 ]
- ない
というか意味があるかないかで言うなら、inlineは常に意味がない コンパイラは自由にインライン化要請を無視できるし、要請されてない関数をインライン化することが出来る
- 422 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 17:25:36 ]
- 規格上はそうだが、一応現実的には意味はあるから、意味なしと言い切ってしまうのは誤解を招くのでは。
例えば俺が使っているコンパイラは「inline指定に従う/無視する」「inline指定がなくても勝手にinline化する/しない」 などの指示を自分で出すことができる。
- 423 名前:422 mailto:sage [2009/05/24(日) 17:26:22 ]
- もちろん環境依存の話だから、詳しくは「自分が使ってるコンパイラについて調べてね」ってことだけど。
- 424 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 17:33:39 ]
- inlineは、コンパイラの最適化云々ではなく、
ヘッダに直接(= インラインで)定義するぞ、という意味だと思えばいい。
- 425 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 17:53:20 ]
- >>424
変な誤解を生むから詳しく知らないなら 黙ってるか断定的に書くな。
- 426 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 18:02:20 ]
- >>424
適当なこと書くなよ。 cppファイルにてもinlineは書けるわけだし もう何が何なのかw
- 427 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 18:05:30 ]
- >>424
インラインに”ヘッダに直接”という意味があったなんて白なkったおれはどうすればいい?
- 428 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 18:06:30 ]
- "C++" "ヘッダに直接" "インライン"の検索結果 5 件中 1 - 5 件目 (0.33 秒)
- 429 名前:426 mailto:sage [2009/05/24(日) 18:08:40 ]
- >>428
よくやったwww
- 430 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 18:35:56 ]
- ところで>>420でinlineを付けなかったらリンカエラーにならない?
そういう意味でinlineはいると思うんだけど。
- 431 名前:デフォルトの名無しさん [2009/05/24(日) 18:37:06 ]
- んなわけない。
- 432 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 18:38:13 ]
- >>430
よくわからないけどオブジェクトコードにクロージャっぽいのがつくられるきがするぅ
- 433 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 18:53:52 ]
- int DLLAPI (*mcOpenDevice ) (void) = NULL;
あるDLLについてたヘッダ内の記載なんですがVCで「構文エラー : '('」が出ます カッコの数は合ってるし、関数ポインタの宣言としてもおかしくないように見えるのですが 詳しい方から見て何か違和感はありますでしょうか? ちなみに #define DLLAPI WINAPI されてます
- 434 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 18:55:29 ]
- ん、俺の環境(gcc 3.4.5)だと、ヘッダファイルのクラス定義内部じゃないところにinlineがついてない関数定義があって
それを複数の翻訳単位でインクルードしてコンパイルしてリンクすると、多重定義エラーでるなぁ。
- 435 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 18:56:14 ]
- 問題ないと思う
多分その直前に何かおかしい所がありそう
- 436 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 18:58:40 ]
- WINAPIを関数名と勘違いしちゃったんだろうな。
- 437 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 19:02:20 ]
- >>435 ありがとうございます
自分の作ったのでも結構悩むのに、さらに人の作ったのだと難度高いです・・・ もうちょっと見直してきます
- 438 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 19:18:02 ]
- プリプロセスだけ通してみるとか
- 439 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 19:19:27 ]
- 先に<windows.h>をインクルードしたらいいと思う。
- 440 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 19:30:27 ]
- >>438
プリプロセッサ以外の記述を削除ってことですか? >>439 <windows.h>とかメジャー系はいくつか試したんですがダメでした・・・
- 441 名前:433 mailto:sage [2009/05/24(日) 19:35:13 ]
- >>433のはMCRWwinというツールのです
ttp://www.geocities.jp/altshibabou/win/image/mcrwwin110.LZH どなたかVC使いの方でビルド通るか実験して頂ける方はおりますでしょうか 最近入れなおしたので、私のVCの設定が悪いのかもしれない
- 442 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 19:37:14 ]
- とりあえず
#define WINAPI か #define WINAPI __stdcall って書いとけ。
- 443 名前:433 mailto:sage [2009/05/24(日) 19:52:22 ]
- >>438
すんません、勘違いしてました /E /Pで.i吐かせて該当行見ましたら int __stdcall (*mcOpenDevice ) (void) = ((void *)0); と展開されてました、他の箇所も見た感じ悪くはなさげなのです
- 444 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 20:09:04 ]
- >>443
おお、それはエラーになる。 int (DLLAPI *mcOpenDevice)(void) = NULL;としてみるんだ。 msdn.microsoft.com/ja-jp/library/zxk0tw93.aspx 一番最後のExampleでもそうなっている。
- 445 名前:420 mailto:sage [2009/05/24(日) 20:19:30 ]
- >>421-434
VC++2003を使っていて、今のところ1つのcppファイルからしかインクルードしてないので inlineを付けても付けなくても問題はなかったのですが、 付けないとcppファイル毎に関数が定義されているとみなされる=>>430や>>434 ということなんでしょうね。 どうもありがとうございました。
- 446 名前:433 mailto:sage [2009/05/24(日) 20:19:42 ]
- >>444
ありがとうございます、無事ビルド通りました >>436さんも多分同じこと指摘してくれてたんですよね、分からなくて申し訳ないです みなさんのおかげで先に進めそうです 本当にありがとうございました。
- 447 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 21:06:14 ]
- 超初心者ですがコンパイラ何使ったらいでしょう?
- 448 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 21:06:41 ]
- gcc
- 449 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 21:09:35 ]
- 書き忘れました
windowsで使えるものをお願いします
- 450 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 21:10:55 ]
- >>448
よくわからないのでとりあえずぐぐってみます ありがとうございます
- 451 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 21:13:22 ]
- >450
WinならMinGW まあgccなんだけどな
- 452 名前:デフォルトの名無しさん [2009/05/24(日) 21:13:37 ]
- >>447
Visual C++ Express 2008 www.microsoft.com/japan/msdn/vstudio/Express/
- 453 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 21:15:33 ]
- >>451-452
レスありがとうございます
- 454 名前:デフォルトの名無しさん [2009/05/24(日) 21:35:25 ]
- Toubo C++
- 455 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 01:23:27 ]
- >>454
初めて聞いた。 そしてググってみてちょっと面白かった。
- 456 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 01:28:58 ]
- 7件しかヒットしないぞ?
しかも全部中国。
- 457 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 02:44:48 ]
- 昔はTurboCといえば、M$としのぎを削った人気コンパイラだったのだよ。
- 458 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 04:02:59 ]
- いやTouboだし。
- 459 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 05:23:12 ]
- Toubo C++
検索したら漢字ばっかで いじる勇気がでない。
- 460 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 06:40:45 ]
- JIS X3014 6.6.3 return の 2 の最終行、「未定」が「末定」になってるw
- 461 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 07:46:16 ]
- しばらくVBAばっかりいじってたから、C++のウィンドウの扱いが面倒に思えて困る
いつもVCの空のプロジェクトにダイアログリソース突っ込んで出してるんだが ひょっとして空のプロジェクト使わなければC#とかみたいに簡単に扱えるのかな? 空じゃないプロジェクトって最初からコードいっぱい書いてて抵抗あったから今まで触ったこと無いんだ
- 462 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 07:48:25 ]
- スレ違いすぎるだろ…
- 463 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 08:31:50 ]
- >>461
vcでポトペタできるのはダイアログだけだよ ウィンドウはムリポ スケルトンコードは慣れかな どうせ似たようなコード書くんだし 続きはVSスレかWinAPIスレかMFCスレで
- 464 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 08:46:11 ]
- 461です、スレ違いすまんかった
覗いてみた感じここの奴は視野が広そうだったから、ここで聞いてしまった 数年前に比べて大して便利になってないという事だな 昔作ったスケルトン掃除して使ってみるよ、ありがとう
- 465 名前:デフォルトの名無しさん [2009/05/25(月) 19:30:32 ]
- blitz::Arrayって何を意味してる? ググってもわからんかった
- 466 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 19:46:06 ]
- >>465
C++の言語に関する話としては blitzというクラスの、Arrayというメンバ。もしくは、blitzという名前空間に含まれる Array というもの。 実際ぐぐってみたところ、Blitz++というライブラリがあるみたいだね。 このライブラリでblitzという名前空間を使っているようだ。
- 467 名前:466 mailto:sage [2009/05/25(月) 19:47:15 ]
- 英語が苦手で無いなら以下をどうぞ。
ttp://www.oonumerics.org/blitz/docs/blitz_2.html
- 468 名前:デフォルトの名無しさん [2009/05/25(月) 20:11:46 ]
- >>467
回答どうも 軽く読んでみた。 じゃあどうやら 『blitz::Array< int, 2 > A 』 って宣言だと 『中に整数値の入る2次元の行列式の定義をbiltzっていう名前空間でやってる』って感じでいいのかね Arrayは直訳で行列じゃなくて配列なのが気になるんだけどね・・・
- 469 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 20:15:59 ]
- >>468
細かいとこちょっと違うけど概ねそんな感じ。
- 470 名前:デフォルトの名無しさん [2009/05/25(月) 20:21:33 ]
- >>469
ごめん Cは前々からやってたんだけどC++は最近独学で始めたばっかりなんだわ… で、違うところって? (俺の知識が浅いから、伝わらなそうだったらスルーしてくれ)
- 471 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 20:24:23 ]
- >>470
ごめん、ちょっと忙しくなるから、後でまた来るわ そのときまでに他のレスがついてなかったら書くよ
- 472 名前:471 mailto:sage [2009/05/25(月) 21:07:14 ]
- まず、blitz::Array そのものは blitz名前空間の中に入ってるが、
blitz::Array< int, 2 > A; とした場合、(これ自体をblitz名前空間の中に書かない限り)このAはblitz名前空間には入らない。 あと、「行列式」じゃなくて「行列」だな。(似てるけど意味が違う)
- 473 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 21:10:27 ]
- 行列式でいいだろ
行列を表すexpressionなんだから determinantのことを言いたいなら、それは揚げ足取りと言うものだ 感心しない
- 474 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 21:10:55 ]
- C++始めたばかりなら名前空間をよく分かってないかもしれんが
まあ、ちょっと語弊があるけど “blitz::Array<int,2>” で1つのクラス名だと思ってしまってもよい。 int a; がint型の変数aであるのと同じように blitz::Array<int,2> a; は blitz::Array<int,2> 型の変数aだ。 名前空間ってのは、例えばライブラリ作成者がArrayっていう名前のものを提供している場合、 利用者のコードにもArrayってのがあると名前が衝突してしまって不都合だから、 名前がぶつからないように blitz:: という修飾をつけてるんだと思えばよい。
- 475 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 21:12:06 ]
- >>473
そうか? 俺はどうしても気になるし明確に誤りだと思うが、まあ揚げ足取りと取られるならこれ以上は言うまい。
- 476 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 21:14:04 ]
- >>473
アホだろお前。
- 477 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 21:55:28 ]
- 行列式は駄目でしょ
- 478 名前:470 [2009/05/25(月) 22:04:48 ]
- なんか複数人からレスもらってるみたいで、皆さんどうもありがとう
blitz::Array<int,2> 型の変数aって感じは掴めてたんだけど、そもそもblitz::Arrayは何を表現するのかが不明で困ってたのよ それはそうとプログラム板って初めて来たけどID表示ないんだな、不便じゃない?
- 479 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 22:13:22 ]
- >>476
そういう言い方はたとえ2chでもどうかと思うぞ まぁでも 行列と行列式は…何と何くらい違うんだろ。ブドウとグレープフルーツくらい?
- 480 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 22:16:39 ]
- >>478
スクリプト書けばID丸わかりだから不便じゃないよ。
- 481 名前:デフォルトの名無しさん [2009/05/25(月) 22:53:31 ]
- IDが分からなくても別に不便を感じたことない。
- 482 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 23:01:25 ]
- Win32APIスレはなりすましで大変なことに…
- 483 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 23:06:44 ]
- 別に大変じゃないし
- 484 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 10:34:48 ]
- >>395
A(int i) { i = hoge; } ↑ は何をしたいの?
- 485 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 15:55:38 ]
- とてもサイズの大きなメンバ変数があったとき、
「そのメンバ変数のポインタを返すようなメンバ関数を作る」か、 「そのメンバ変数のコピーを返すようなメンバ関数を作る」か、 どちらがオブジェクト指向としてはよろしいのでしょうか? 前者だと、privateなメンバ変数に対して外部からタッチしてしまうことになりますが、 無駄が少ないように思えます。 後者だとprivateなメンバ変数を保護(?)できるというか、そういう考え方に則しているような気がしますが、 無駄にメモリを食ってしまう気がします。 完全に独学のため、ちょっと意味不明な単語が混じっているかもしれませんが、 教えてください。よろしくお願いします。
- 486 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 16:03:49 ]
- >>485
どちらも問題外 クラスの設計をし直せ
- 487 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 16:11:05 ]
- int gethoge();のような関数を作るのはよろしくないということなんでしょうか?
↑だとintのコピーを返す関数に当たると思うのですが、問題外となると、ちょっと目の前が真っ暗になってきました…。
- 488 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 16:49:15 ]
- privateな構造がしゃしゃり出てくるクラス設計が間違い
最初からpublicに分類すべき それで問題が出るなら普通の人なら根本から作り直すね
- 489 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 16:54:31 ]
- すみません、現段階ではちょっと理解できないのですが、文献を漁ってなんとかしてみます。
貴重なアドバイスありがとうございます。
- 490 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 16:55:12 ]
- >>485
const なポインタ or 参照を返せば、他から変更はできないけど、 他の部分がそのオブジェクトの構造に依存することになるね
- 491 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 19:08:44 ]
- アクセス制御がなんのためにあるのかという根本が分かってないように見える
- 492 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 19:49:43 ]
- >>485
まあ要するに、 クラスのクライアント(使う人)が privateなメンバ変数(およびprivateメンバ関数) については何も知らなくても publicなメンバ関数を見るだけで 使えるように設計すべき ということだよ。 これはすなわち、public/protectedなメンバ関数以外が変わっても クライアントが書いたコードには影響がないということ。 ちなみにpublicなメンバ変数なんて大抵はクソ設計の証。
- 493 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 20:06:47 ]
- 485じゃないけど
>>492 それは基本的にはカプセル化に重点を置いてコードを書いた方が良い、ということで良いんでしょうか?
- 494 名前:492 mailto:sage [2009/05/26(火) 20:41:33 ]
- >>493
そう。基本的にはね。 オブジェクト指向プログラミング (OOP; object-oriented programming) においてカプセル化はとーーっても大事。 たまにいっそ全部publicにということで構造体structを使うことがあるけど 基本的にはそういうこと。
- 495 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 21:29:31 ]
- なんとなく分かってきました、ありがとうございます
- 496 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 21:44:30 ]
- まあ現実的にはpublic変数だの参照返しも使うことはあるけどね
|

|