[過去ログ]
C++相談室 part164 (1002レス)
C++相談室 part164 http://mevius.5ch.net/test/read.cgi/tech/1683600652/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
481: デフォルトの名無しさん (JP 0H8a-PPvg) [] 2023/07/15(土) 21:13:09.66 ID:2P0YU21lH あるクラスにあるクラスのコレクションを抱かさせてるなんて良くあると思うけど その際に外部からそのコレクションを参照したい場合、どうするのが定石なの? class Datas {private:std::vector<Data> _datas;}; publicにするとか、std::vector<Data>::iteratorをpublicにするとか const Data& operator[](int index)をpublicにするとかいろいろあると思うけど http://mevius.5ch.net/test/read.cgi/tech/1683600652/481
487: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 163e-MI76) [sage] 2023/07/15(土) 21:58:55.40 ID:oCSaktaG0 >>481 場合による。 見せる相手が最初から限定的であるような場合はフレンドを宣言すればいい。 コンテナ系クラスとかは内部的にはたぶんノードを表すクラスとか も使ってると思うけどそういう感じで密接に関連がありつつ 他では使う可能性がないような強い関係性がある場合はフレンドにする。 データを保持するためだけの汎用クラスとして定義するならデータメンバは public にしてもかまわない。 std::pair とかはそうなってる。 もうちょっと疎結合にしたいときなら許したい操作だけをpublic なメンバ関数として公開すると思う。 既存のクラスを使いつつ外部に公開するのはサブセットにしたいという場合なら プライベート継承した上で公開したいメンバだけ using するという方法も取れる。 #include <iostream> #include <vector> struct Data : private std::vector<int> { using std::vector<int>::vector; using std::vector<int>::operator[]; using std::vector<int>::begin; using std::vector<int>::end; }; int main(void) { Data foo = {1, 2, 3}; for (int x : foo) { std::cout << x << std::endl; } } http://mevius.5ch.net/test/read.cgi/tech/1683600652/487
488: デフォルトの名無しさん (ワッチョイ df01-L4gQ) [sage] 2023/07/15(土) 22:04:51.15 ID:wfhnDtnz0 >>481 privateメンバなのだから できるだけ外部からそのコレクションを参照しないように設計するべきだと思うよ どうしてもってならiteratorではなくconst_iteratorにするとか あなたが書いてるようにconst Data&を返すaccessorを実装するとか http://mevius.5ch.net/test/read.cgi/tech/1683600652/488
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.037s