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

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

8
メイクファイルを学ぶことはどれほど重要ですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 私は主に趣味としてc ++で働いています(私はまだ学校にいるので、実際の仕事はありません)。IDEは私のためにメイクファイルを生成するので、それを自分で作る方法を学ぶ価値があるかどうか疑問に思っています。「価値のある学習」とは、C ++を学習し続ける前に、すべてを落とし、それらの書き方を学ぶ必要があるということです。それらを学ぶことは本当に必要になるでしょうか?もしそうなら、それらについて(一般的な構文とそれらがどのように機能するかを理解するなど)学ぶべきか、実際にそれらを書く方法を学ぶべきですか?
12 java  learning  c++  syntax  make 

4
オブジェクト指向プログラミング:ゲッター/セッターまたは論理名
私は現在、書いているクラスへのインターフェースについて考えています。このクラスには、キャラクターのスタイル、たとえば、キャラクターが太字、斜体、下線などが含まれます。これらのスタイル。私は論理名を好む傾向がありますが、それは効率的でも論理的でもないコードを書くことを意味します。例を挙げましょう。 私はクラスの持っているCharacterStylesメンバ変数があるbold、italic、underline(およびいくつかの他の人を、私はそれをシンプルに保つためにそれらを残しておきます)。最も簡単な方法は、あなたが行うことができるように、書き込みgetter / setterメソッドになり、これらの変数にアクセスするには、プログラムの他の部分を可能にstyles.setBold(true)してstyles.setItalic(false)。 しかし、私はこれが好きではありません。多くの人がゲッター/セッターがカプセル化を破ると言っているだけでなく(それは本当にそんなに悪いのですか?)私は、styles.format("bold", true)これらのすべての方法ではなく、1つの方法などでキャラクターのスタイルを設定することを期待しています。 ただし、1つの問題があります。C ++の文字列の内容ではオブジェクトメンバー変数にアクセスできないため、すべてのスタイルに対して大きなifステートメント/スイッチコンテナーを記述するか、スタイルを連想配列に格納する必要があります(地図)。 最善の方法がわからない。ある瞬間、私はゲッター/セッターを書くべきだと思い、次の瞬間、私は他の方法に傾く。私の質問は:あなたは何をしますか?そして、なぜあなたはそれをするのでしょうか?

3
C ++ 11との前方互換性の実現
私は、いくつかのプラットフォームで実行する必要がある大規模なソフトウェアアプリケーションで作業しています。これらのプラットフォームの一部は、C ++ 11の一部の機能(MSVS 2010など)をサポートしていますが、一部のプラットフォームはサポートしていません(GCC 4.3.xなど)。私はこの状況が数年間続くと予想しています(私の推測では3〜5年)。 そのため、最小限の保守で古いコンパイラでコンパイルできるC ++ 11コードを(可能な限り)作成できるように、互換性インターフェイスを設定したいと思います。全体として、目標は#ifdefを合理的に可能な限り最小化すると同時に、それらをサポートするプラットフォームで基本的なC ++ 11構文/機能を有効にし、サポートしないプラットフォームでエミュレーションを提供することです。 std :: move()から始めましょう。互換性を実現する最も明白な方法は、次のようなものを共通のヘッダーファイルに入れることです。 #if !defined(HAS_STD_MOVE) namespace std { // C++11 emulation template <typename T> inline T& move(T& v) { return v; } template <typename T> inline const T& move(const T& v) { return v; } } #endif // !defined(HAS_STD_MOVE) これにより、人々は次のようなことを書くことができます …
12 c++  c++11 

7
コードを書いた後、なぜ私はしばらくして「もっと良く書いただろう」と感じるのですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 8年前に閉鎖されました。 私は2年以上、C ++で趣味のプロジェクトに取り組んでいます。モジュール/関数を作成するたびに、多くのことを考えてコーディングします。今、問題を見て、 do { --> write the code in module 'X' and test it --> ... forget for sometime ... --> revisit the same piece of code (due to some requirement) --> feel that "This isn't written nicely; could have been better" } while(true); ここ'X'に任意のモジュールがあります(小/大/中)。これは、コーディング中にどれだけの労力を費やしても発生します。そのため、ほとんどの場合、動作するコードを見ることは控えています。:) これは多くの人に共通の気持ちですか?この言語特有の現象ですか?(C ++では、同じことを異なる方法で書くことができるため)。 現実の製品コードでこのリファクタリングの感覚が得られたら、どうすればいいですか?作業中のコードを変更しても賞賛は得られませんが、失敗するとトラブルが発生する可能性があります。

3
クラスと構造体
C ++およびその他の影響を受ける言語には、Structure(struct)と呼ばれる構造体と、と呼ばれる別の構造体がありclassます。どちらも関数と変数を保持できます。いくつかの違いは次のとおりです。 クラスには、ヒープ内のstructメモリが割り当てられ、スタック内のメモリが割り当てられます(注意:これはC ++では間違っていますが、OPが「影響を受けた言語」と呼んだものでは正しいかもしれません) クラス変数はデフォルトでプライベートであり、structそれらはパブリックです 私の質問はstruct、クラスはどういうわけか放棄されたのですか?もしそうなら、なぜですか?上記の違いをstruct除けば、クラスと同じことをすべて行うことができます。なぜそれを放棄するのですか?

12
多くの場合、C ++が大学で最初の言語として教えられるのはなぜですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 6年前に閉鎖されました。 ロックされています。この質問とその回答はロックされています。なぜなら、質問はトピックから外れていますが、歴史的に重要だからです。現在、新しい回答やインタラクションを受け付けていません。 私の学校は、C ++プログラミングコースでコンピューターサイエンスのカリキュラムを開始しています。つまり、これは多くの学生が学ぶ最初の言語です。 私は、多くの人がC ++を嫌うのを見てきました。その理由はさまざまです。C ++はあまり良い言語ではないというのが、一般的な意見のようです。StackExchangeに関するいくつかの質問と次のような投稿に基づいて、あまり好かれていない印象を受けます: http ://damienkatz.net/2004/08/why-c-sucks.html http://blogs.kde.org/ node / 2298 http://blogs.cio.com/esther_schindler/linus_torvalds_why_c_sucks http://www.dacris.com/blog/2010/02/16/why-c-sucks-part-2/ など (注:C ++が悪い言語であるというのは私の意見ではありません。実際、C ++は私が使用する主要言語です。しかし、インターネットや一部の教授は、C ++はあまり好きではないという印象を与えています。 、私の教授の一人は常にC ++に耳を傾けていますが、それでも私の大学ではまだ最初の言語です!) それを念頭に置いて、なぜこれが多くの学校で最初の言語が教えられているのですか?C ++でプログラミングカリキュラムを開始する理由は何ですか? 注:この質問は「C ++は第一言語として適していますか」と似ていますが、それが適しているかどうかには興味がありませんが、なぜ選ばれたのかは少し異なります。
12 c++ 

9
継承が間違っている
良い継承モデルが下り坂になっているコードがいくつかあり、それを修正する理由と方法を理解しようとしています。基本的に、次のようなZoo階層があるとします。 class Animal class Parrot : Animal class Elephant : Animal class Cow : Animal 等 eat()、run()などのメソッドがあり、すべてが適切です。それからある日誰かがやって来て言う-私たちのCageBuilderクラスはうまく機能し、animal.weight()とanimal.height()を使用しますが、新しいアフリカバイソンは強すぎて壁を砕くことができるので、追加しますAnimalクラスのもう1つのプロパティ-isAfricanBizon()で、マテリアルを選択するときにそれを使用し、AfricanBizonクラスに対してのみオーバーライドします。次の人が来て、似たようなことをします。次に、基本クラスへの階層のサブセットに固有のこれらすべてのプロパティがあることを知っています。 そのようなコードを改善/リファクタリングする良い方法は何ですか?ここでの1つの代替方法は、dynamic_castsを使用して型をチェックすることですが、呼び出し元を混乱させ、あらゆる場所にif-then-elseを追加します。ここでは、より具体的なインターフェイスを使用できますが、基本クラス参照のみを使用している場合は、あまり役に立ちません。他の提案はありますか?例? ありがとう!

2
C ++のバックトラッキングを理解する
私はC ++の基本について十分に基本的な理解を持っています。また、再帰がどのように機能するかも理解しています。私は、古典的な8つのクイーンの問題やバックトラックで数独を解くなどの特定の問題に遭遇しました。 これに関してはかなり迷っていることに気づきました。再帰スタックに戻って問題を解決するためにやり直すという概念を思い浮かべることができないようです。ペンと紙で簡単に思えますが、このためのコードを書くことになると、これらの問題への攻撃を開始する方法について混乱しています。 バックトラックの初心者向けのチュートリアルがある場合や、これが取り上げられている良い本がある場合に役立ちます。誰かがこのトピックに光を当てるか、まともな参考文献へのリンクを教えてくれれば、本当にありがたいです。 そして、はい、関数型言語の方が簡単であることは知っていますが、命令型言語の実装についても理解したいと思います。
12 c++  recursion 

9
オブジェクト指向の落とし穴の回避、Cからの移行、何が効果的でしたか?
私はかなり長い間手続き言語でプログラミングしてきましたが、問題に対する私の最初の反応は、存在するさまざまなエンティティ(オブジェクト)とそれらの関係を考慮するのではなく、実行するタスクに分解することです。 私はOOPで大学のコースを受講し、カプセル化、データ抽象化、多態性、モジュール性、継承の基礎を理解しています。 私が読ん/programming/2688910/learning-to-think-in-the-object-oriented-wayと/programming/1157847/learning-object-oriented-thinking、そして、それらの答えで指摘されている本のいくつかを見ていきます。 中規模から大規模のプロジェクトのいくつかは、OOPの効果的な使用から恩恵を受けると思いますが、初心者として、時間のかかる一般的なエラーを避けたいと思います。 あなたの経験に基づいて、これらの落とし穴は何ですか、そしてそれらの周りの合理的な方法は何ですか?それらが落とし穴である理由、およびあなたの提案が問題に対処するのにどのように効果的であるかを説明できれば、それは高く評価されるでしょう。 「かなりの数のオブザーバーとモディファイヤメソッドを持ち、プライベート変数を使用するのは一般的ですか、それともそれらを統合/削減する技術はありますか?」 メソッドを混在させる正当な理由がある場合、純粋なオブジェクト指向言語としてC ++を使用することは心配していません。(控えめではありますが、GOTOを使用する理由を連想させます。) ありがとうございました!

4
初期化メソッドを避ける
この既存のコードには、クラスとそのクラスの初期化メソッドがあります。クラスのオブジェクトが作成されたら、そのオブジェクトでinitializeを呼び出す必要があります。 初期化メソッドが存在する理由 オブジェクトは、グローバルスコープを持つように早期に作成され、その後、依存するDLLを読み込んだ後に初期化メソッドが呼び出されます。 初期化 の問題クラスには現在、このbool isInitializedがあります。初期化されていない場合、処理を続行してエラーを返す前にすべてのメソッドでチェックする必要があります。簡単に言えば、それは大きな痛みです。 考えられる解決策の1つ は、コンストラクターで初期化することです。グローバルスコープ内のオブジェクトへのポインターのみがあります。dllがロードされた後、実際のオブジェクトを作成します。 上記のソリューションの問題 このクラスのオブジェクトを作成する人は誰でも、dllがロードされた後にのみ作成される必要があることを知る必要があります。さもないと、失敗します。 これは受け入れられますか?

4
C ++でインターフェイスと実装を整理する方法
C ++には、ヘッダーファイルの内容とcppファイルの内容に関するいくつかの異なるパラダイムがあることがわかりました。私の知る限り、ほとんどの人、特にCのバックグラウンドを持つ人は: foo.h class foo { private: int mem; int bar(); public: foo(); foo(const foo&); foo& operator=(foo); ~foo(); } foo.cpp #include foo.h foo::bar() { return mem; } foo::foo() { mem = 42; } foo::foo(const foo& f) { mem = f.mem; } foo::operator=(foo f) { mem = f.mem; } foo::~foo() {} …

12
C ++はOOPに適していませんか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 C ++はオブジェクト指向プログラミングに適していないことを、ここでの質問に対する回答の1つで(どこにあるか覚えていない)読みました。あなたはその機能またはそのようなものを利用できるが、純粋にOOPの意味ではないという言及がありました(私は実際にその人の意味を本当に理解していませんでした)。 これにはいくつかの真実があります。もしそうなら、なぜですか?

2
アンダースコアで変数/メンバーを開始すると、コンパイラが困惑することがありますか?
私は高校以来、このような変数を定義することを教えられてきました。 int _a; または int __a; アンダースコアで始まる変数を使用して一時変数に名前を付けるコンパイラーを最終的に困惑させるので、悪い慣習を検討する必要があります。 私の知る限り、これが名前の最後にアンダースコアを移動することを好む理由です: int a_; ただし、アンダースコア開始変数を使用するコードがたくさん見られます。そして、そのコードはVisual Studio 2010とg ++ 4.xの両方でかなりうまくビルドされます。 だから私は疑問に思う:これは最近の問題ではないのですか?最新のコンパイラは命名規則について賢いですか?

8
すべての列挙型を1つのファイルに含め、複数のクラスで使用するのは悪い習慣ですか?
私は意欲的なゲーム開発者であり、時折インディーゲームに取り組んでいます。しばらくの間、最初は悪い習慣のように思われたことをしていましたが、ここで経験豊富なプログラマーから答えをもらいたいです。 enumList.hゲームで使用するすべての列挙型を宣言するファイルがあります。 // enumList.h enum materials_t { WOOD, STONE, ETC }; enum entity_t { PLAYER, MONSTER }; enum map_t { 2D, 3D }; // and so on. // Tile.h #include "enumList.h" #include <vector> class tile { // stuff }; 主なアイデアは、1つのファイルでゲーム内のすべての列挙型を宣言し、使用する必要があるファイルで宣言するのではなく、特定の列挙型を使用する必要があるときにそのファイルをインポートすることです。これは、物事をきれいにするためです。1つの列挙にアクセスするためだけにページを開くのではなく、1か所ですべての列挙にアクセスできます。 これは悪い習慣ですか、何らかの形でパフォーマンスに影響を与えることができますか?

2
コンパイル済みのC ++ 11ライブラリ(lib、dllなど)を古いC ++コンパイラにリンクできますか?
古いC ++コンパイラ(VS2008やgcc3.4など)は、C ++ 11で記述された外部ライブラリとリンクできますか? 私の考えでは、C ++ 11 .libファイルはこの段階では単なるバイトコードであり、何らかの方法で解決可能かつ呼び出し可能であれば、古いコンパイラの生成方法を気にするべきではありません。 私はAPIがまだC ++ 03ユーザーをサポートする小さなライブラリを開発しています。だから、楽しみにして、std::unique_ptrなどの便利な機能を使用してライブラリを実装しても大丈夫なのか、それとも固執する必要があるのboost::でしょうか?
12 c++  c++11 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.