web-dev-qa-db-ja.com

C#開発者向けのC ++

私はC#をかなりよく知っており(独学で悲しいことに)、Windowsアプリケーション用にC++プログラミングを行う必要があります。 C#を学習しているC++開発者向けの情報をたくさん見つけることができましたが、C#をすでに知っている場合は、C++の学習についてはあまり知りませんでした。誰かが基本の良い要約に出くわしましたか?

MSDNには比較があります ですが、あまり詳細ではありません。

私はいくつかの情報源をつなぎ合わせることができますが、そこに何かがあったと考えました-それを見つけることができません。ご協力いただきありがとうございます。

27
Mark Williams

このスレッド Java開発者向けのC++の開発者は非常によく似ているので、特にMark Byerの投稿を参考にしてください:

これらの本を読んでください:

おそらく、覚えておかなければならない最も重要なことは、 C#/ JavaとC++ のメモリ管理手法の違いを理解することです。

私の教授の1人は、Javaバックグラウンドから来て、それがケーキだと思ってC++入門コースを教えました。彼が誰にも意味をなさないことを説明しました。彼はどこにでもメモリリークがありました。彼のポインタ演算はひどい。彼は決してOOPシラバスの一部(神に感謝)にたどり着いたことはありません。彼が示したものは事実上何もコンパイルしなかったでしょう。彼はそれを理解していませんでしたchar[]番兵が必要でした\0。彼のようになってはいけません。

11
Rei Miyasaka

残念ながら、基本的なC++についてはそれほど多くないので、私はあなたの望みをかなえません。さらに、C++にリモートで転送できるC#についてはほとんど知らないので、その角度をカバーする特定の資料が存在するとは思わないでしょう。最初から学ぶ必要があります。

14
DeadMG

これに対する簡単な修正はありません。C++は特に難しくはありませんが、初心者には簡単ではありません。

Cプログラミングの基礎を読んで(見つけた低レベルのものの基礎を得るために)、次にSTLを学び、次にScott Meyersなどの記事を読むことをお勧めします。 これは1つです これは、C-with-classesと比較して、最新のC++をどのように記述する必要があるかを示しています。

9
gbjbaanb

まだ資料を探しているかどうかはわかりませんが、この記事は数か月前に見つかりました。本ではありません(53ページのみ)。イントロダクションはそれをすべて言います:

This is a somewhat short guide to the important things to know if you are a C# programmer and find yourself needing or wanting to work in C++

http://geekswithblogs.net/mikebmcl/archive/2012/02/02/c-to-c-ndash-a-somewhat-short-guide.aspx

また、更新投稿もあります:

http://geekswithblogs.net/mikebmcl/archive/2012/02/14/c-to-cndasha-somewhat-short-guide-update-1.aspx

上記のページには、PDFバージョンへのデッドリンクが含まれています。これが archived pdf です。

幸せな学習:)

7
Chris
  • メモリ管理に注意してください。 C#とは対照的に、C++でポインターと参照がどのように機能するかを明確に理解してください。また、RAII、手動メモリ管理、スマートポインタがついに登場。
  • テンプレートとジェネリックは似ていますが、別の獣です。テンプレートがどのように機能するかについての内部を知ってください。
  • 若干のキャッチーな構文上の違いがあります。それらを学ぶ。
  • .net BCLの代わりにSTLに慣れている。 LINQ依存症がある場合、いくつかの良いビットを見逃す可能性があります。
  • C++とC#の間には、いくつかの基本的な設計上の違いがあります。したがって、アイデアを移植することはできません。 C++で構築するものはすべて、ゼロから設計する必要があります。
  • 幸運を
4
Gulshan

C#からC++へのチュートリアルが多すぎないのは良いことだと思います。彼らはおそらくあなたの脳を混乱させるかもしれません。これは、まずバイクに乗ってから自転車に乗り換えることを学ぶのとよく似ています(完全に適切なアノロジーではありませんが、アイデアはわかります)。 C++に関する最新の本を読むことをお勧めします。 OOPの概念をすでに理解しているので、OOPの概念(CからC++に移行する人を対象としています)への長い説明は省略できます)。または、初心者から中級者または中級者向けの参考図書を直接探してください。

1
DPD

だから、約1年前、私はあなたと同じ船に乗っていました。C++を学ぶ必要性を感じた独学のc#開発者です。確かに、私は何度も立ち止まって開始しました。 3回目の試みで、私はついにそれを突き刺しました。

理解する必要があるのは、C++およびC#の方法論の観点から、ポインターと参照を介してどのデータ操作メソッドを理解するのに多くの時間を費やすことになるでしょう本当に手段、および状況を考慮してそれらをいつどのように使用するかを意味します。

C++の良い点は、オブジェクトスタックの割り当てがほとんどの場合非常に単純であることです。プログラムがこのメソッドで指定された要件を満たす場合は、この方法でオブジェクトを割り当てる必要があります。それ以外の場合は、速度、効率、および迅速なクリーンアップをポインタに依存しています。私はこれを読むことをお勧めします: http://www.parashift.com/c++-faq-lite/ これは、C++が内部でどのように機能するかについての技術的な理解をたくさん与えるためです。

例を挙げましょう。

C++では、「初期化リスト」と呼ばれるこのコンストラクター実装が存在します。これは、コンストラクターの本体でクラスメンバーを初期化することとは異なります。どうして?初期化されている型がプリミティブでない限り、コンパイラーは実際に複数作成し、ctorの本体に割り当てられたときに作成されるオブジェクトの不要なコピーを作成します。これにより、コンパイラーやアプリのスケーリングされた要件によっては、パフォーマンスが低下する可能性があります。

デリゲートとは何か知っていますか?まあ、C++では関数ポインターとして知られています。この言語は、最初はマスターするのがかなり難しいですが、あなたが素晴らしいものになりたいのなら...それは絶対に必要です。

C#は簡単です...とても簡単です。

1
about blank

Rosetta Codeにアクセスして、2つを比較することをお勧めします。そこにいる間、C++イディオムのリンクを手元に置いておき、それらを見つけてみてください。次に、ポインタ/参照/メモリ/デストラクタレルムに少し時間をかけます。その後、プリプロセッサについて学びます。醜いものを隠すことに関しては、本当にあなたの友達になることができます。ちょっと寂しいです。最後に、STL。

1
Mark