タグ付けされた質問 「c++」

静的に型付けされた自由形式のマルチパラダイムでコンパイルされた汎用プログラミング言語であるC ++に関する質問。

8
STLはOOで実装されていますか?
Adaptor、STLに実装されたIteratorなど、いくつかの設計パターンがあります。 それは、STLがOOの概念で実装されているということですか? OOとC ++のテンプレートパーツの関係は何ですか? オブジェクト指向を正当化する仮想メンバー関数がテンプレートと矛盾することを知りましたが、これは正しいですか?

4
C ++イテレーターの存続期間と無効化の検出
C ++ 11の慣用的なものに基づいて: カスタムコンテナーへのイテレーターは、コンテナー自体が破棄されても存続しますか? イテレータが無効になったときにそれを検出することは可能でしょうか? 上記は「デバッグビルド」を実際に条件としていますか? 詳細:私は最近C ++をブラッシュアップし、C ++ 11の使い方を学びました。その一環として、私はuriparserライブラリーの慣用的なラッパーを作成しています。この一部は、解析されたパスコンポーネントのリンクリスト表現をラップすることです。コンテナーの慣用句についてのアドバイスを探しています。 最近気になるのは、ガベージコレクションされた言語から来ていることですが、ランダムなオブジェクトが、ライフタイムに関して間違いを犯した場合に、ユーザーに表示されなくなるだけではありません。これを説明するために、PathListコンテナとその反復子の両方shared_ptrが実際の内部状態オブジェクトを保持します。これにより、そのデータを指すものが存在する限り、データも存在するようになります。 ただし、STL(および多くの検索)を見ると、C ++コンテナーがこれを保証しているようには見えません。私はこの恐ろしい疑いを抱いており、期待はコンテナーを破壊するだけで、それに伴うイテレーターをすべて無効にすることです。 std::vector確かにイテレータを無効にしても機能するようです。 私が知りたいのは、「良い」/慣用的なC ++ 11コードから何が期待されるかです。光沢のある新しいスマートポインターを考えると、STLを使用すると、誤ってイテレーターをリークして足を簡単に吹き飛ばせるのは奇妙に思えます。shared_ptrバッキングデータを使用することは、不必要な非効率性、デバッグのための良いアイデア、またはSTLが実行しないと予想されることですか? (これを「慣用的なC ++ 11」に接地することで、主観性の訴えが回避されることを願っています...)
8 c++  c++11  idioms  iterator 

6
C ++の優れた知識[終了]
ここで何が質問されているのかを理解することは困難です。この質問は、あいまいで、あいまいで、不完全で、過度に広い、または修辞的であり、現在の形では合理的に回答することができません。再開できるようにこの質問を明確にするヘルプについては、ヘルプセンターに アクセスしてください。 8年前に閉鎖。 私は最近、「C ++に関する優れた知識」が要件の1つであるソフトウェア会社の求人ページを見ました。 今、私はこれがC ++の専門知識として何となく意味することを知っていますが、専門知識はどこに正確に適合するのでしょうか。特定のドメインの内外を把握している、言語での8年間のプログラミング(たとえば、)の知識と経験ですか。または、1つ以上のドメインへのよりブラッシュアップされた表面的なアプローチであり、同時に言語全体のより詳細な理解ですか? たとえば、システムドライバーとゲームエンジンを同時に作成する専門家になることはできません。では、この優れた知識や専門知識はどこに当てはまるのでしょうか?
8 c++  experience 

3
アプリケーションコードと単体テストのインターフェイス
私は、いくつかの新しいモジュールを実装してユニットテストする必要があるプロジェクトに取り組んでいます。私はかなり明確なアーキテクチャを念頭に置いていたので、メインのクラスとメソッドをすぐに書き留めてから、単体テストの作成を開始しました。 テストを書いている間、次のような元のコードにかなりの修正を加える必要がありました。 それらをテストするためにプライベートメソッドをパブリックにする プライベート変数にアクセスするためのメソッドを追加する ユニットテスト内でコードを実行するときに使用するモックオブジェクトを挿入するためのメソッドを追加します。 どういうわけか私はこれらが私たちが何か間違ったことをしている症状であると感じています、例えば 最初の設計が間違っていた(一部の機能は最初から公開されているはずでした)、 コードは、単体テストとのインターフェース用に適切に設計されていません(おそらく、かなりの数のクラスが既に設計されているときに単体テストの設計を開始したという事実が原因です)。 ユニットテストを間違った方法で実装している(たとえば、ユニットテストはAPIのパブリックメソッドを直接テスト/アドレスするだけであり、プライベートメソッドをアドレスするべきではない)。 上記の3つのポイントの混合、およびおそらく私が考えていなかったいくつかの追加の問題。 単体テストの経験はあるものの、第一人者にはほど遠いので、これらの問題についてのあなたの考えを読んでいただければ非常に興味があります。 上記の一般的な質問に加えて、より具体的で技術的な質問があります。 質問1.クラスAのプライベートメソッドmを直接テストし、それをテストするためにパブリックにすることは理にかなっていますか?または、mを呼び出す他のパブリックメソッドを対象とする単体テストによってmが間接的にテストされると想定する必要がありますか? 質問2.クラスAのインスタンスにクラスB(複合集約)のインスタンスが含まれている場合、AをテストするためにBを模擬することは理にかなっていますか?私の最初のアイデアは、BインスタンスはAインスタンスの一部であるため、Bをモック化しないことですが、それからこれについて疑い始めました。Bをモックすることに対する私の議論は、1と同じです:Bはプライベートwrt Aであり、その実装にのみ使用されます。しかし、これらの問題は設計上の欠陥を示している可能性があります。おそらく、複合集約ではなく、AからBへの単純な関連付けを使用する必要があります。 質問3.上記の例で、Bをモックすることにした場合、どのようにBインスタンスをAに注入しますか?ここに私たちが持っていたいくつかのアイデアがあります: AコンストラクターでBインスタンスを作成する代わりに、Aインスタンスの引数としてBインスタンスを注入します。 BFactoryインターフェースを引数としてAコンストラクターに渡し、Aがファクトリーを使用してプライベートBインスタンスを作成できるようにします。 AにプライベートなBFactoryシングルトンを使用します。シングルトンを設定するには、静的メソッドA :: setBFactory()を使用します。Aが設定されている場合(テストシナリオ)、ファクトリシングルトンを使用するBインスタンスを作成する場合、シングルトンが設定されていない場合(実稼働コードシナリオ)、Bを直接作成します。 最初の2つの代替案は私にはきれいに見えますが、Aコンストラクターのシグニチャーを変更する必要があります。APIを変更してテストしやすくすることは、私には不便に思えますが、これは一般的な方法ですか? 3番目の方法には、コンストラクターのシグニチャーを変更する必要がない(APIへの変更の影響が少ない)利点がありますが、テストを開始する前に静的メソッドsetBFactory()を呼び出す必要があります。これはIMOエラーが発生しやすい(テストが適切に機能するためのメソッド呼び出しへの暗黙の依存関係)。どちらを選べばいいのかわかりません。

4
Objective-Cはどこから来たのですか?C ++またはC?
このプログラミング言語であるObjective-Cは、iOSアプリケーションの開発に使用されていると聞いています。 OOPの原則を使用していることは知っています。すでにC ++を知っていると、より簡単に学習できますか?名前は?Cプログラミング言語とC ++で使用するOOP原則の組み合わせですか?
8 c++  c  ios  objective-c 

3
前提条件の確認
私は、クライアントが設計上の契約の最後に留まっていることを保証する目的で、入力を検証するためのランタイムチェックを行うかどうかという質問に対する確かな答えを見つけたいと思っていました。たとえば、単純なクラスコンストラクターを考えます。 class Foo { public: Foo( BarHandle bar ) { FooHandle handle = GetFooHandle( bar ); if( handle == NULL ) { throw std::exception( "invalid FooHandle" ); } } }; この場合、ユーザーはFoo有効ななしでを作成しようとするべきではないと主張しますBarHandle。がコンストラクタのbar内部で有効であることを確認するのは適切ではないようですFoo。そのFooコンストラクタに有効な が必要なことを単純に文書化した場合BarHandle、それで十分ではありませんか?これは、契約による設計の前提条件を強制する適切な方法ですか? これまでのところ、私が読んだことはすべて、これについてさまざまな意見があります。50%の人がそれbarが有効であることを確認すると言うようですが、他の50%は私がそれをすべきではないと言っています。たとえば、ユーザーBarHandleが正しいことを確認したが、2番目の(そして不要な)チェックを行う場合を考えてください。もFooコンストラクタの内部で行われています。

6
constストレージはどのように機能しますか?(項目2、スコットマイヤーズの効果的なC ++)
16ページのItem2(#definesよりもconsts、enums、およびinlineを優先する)で、Scottは次のように述べています。 また、優れたコンパイラは整数型のconstオブジェクトのストレージを確保しませんが... 分かりません。たとえば、constオブジェクトを定義すると、 const int myval = 5; その後、コンパイラは値5を格納するために(intサイズの)メモリを確保しなければなりません またはconstデータは特別な方法で格納されていますか? これは私が思うコンピュータストレージの問題です。基本的に、コンピューターはconstオブジェクトをどのように格納して、ストレージが確保されないようにしますか?

11
オブジェクト指向のものは本当にそれほど重要ですか?[閉まっている]
現在のところ、この質問は、Q&A形式には適していません。私たちは回答が事実、参考文献、または専門知識によってサポートされることを期待しますが、この質問はおそらく議論、議論、投票、または拡張ディスカッションを誘います。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 8年前に閉鎖。 何年もの間、私はアルゴリズム関連の作業を行っており、インターネット検索用のスケーラブルなデータ構造を作成しています。情報検索関連の作業など 上記で述べたことには共通点があります。上記すべてのもの; C ++のような言語でコーディングされている場合は、それぞれ少数のクラスが必要です。私はそれらが興味深い問題であることを意味しますが、負荷の高いオブジェクト指向のものに関しては複雑ではありません。継承や仮想化などを使用したことがありません。ジェネリックプログラミングやテンプレートなどを頻繁に使用しています。 私はC ++が大好きです(-かさばるOOのもの、Erlangの作成者であるJoe Armstrongの言うところが好きなので、OO Worldではバナナを要求すると、大きなジャングルとバナナを抱えているゴリラができます)。私はJavaやPythonのような他の言語でのコーディングも楽しんでいます。 今私の質問は、私が取り組んでいるプロジェクト/アルゴリズムの種類を楽しんでいるからです。オブジェクト指向の要素を本当に学ぶ必要がありますか。継承、動的ポリモーフィズム(仮想)のようなものを使用するだけで、より優れたコーダー/デザイナーになれますか?または、関数型プログラミングの世界に移動できますか(私は今までそれを行っていません)、タスク/アルゴリズムに集中でき、名詞の王国に基づいたオブジェクト指向の要素、has-a、is-aルールを使用できないので、より魅力的です私? 簡単に言えば、OOは私が上記で言及した種類のプロジェクト/アルゴリズムについて私を助けることができますか? 編集: ここに追加する1つの非常に興味深いリンク: http://steve-yegge.blogspot.in/2006/03/execution-in-kingdom-of-nouns.html

2
c / c ++では、ブロックが実行される場合にのみブロックスコープ変数がスタックされますか?
これを仮定します: void func() { ... if( blah ) { int x; } ... } が入るとxすぐにスタックに予約されるスペースですかfunc、それともブロックが実際に実行された場合のみですか? それともコンパイラの選択ですか? CとC ++はこれについて同じように動作しますか?
8 c++  c  stack  allocation 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.