- 「なぜこのようなことが起こるのですか?」という質問をもっとしてください。C++を学習する際には、「なぜそうなるのか?」「なぜこうしなければならないのか?」という疑問をさらに持つ必要があります。例: C++ にコピー コンストラクターと初期化リストがあることは多くの人が知っていますが、なぜコピー コンストラクターがあるのか本当に知っていますか? なぜ初期化リストが必要なのでしょうか? なぜテンプレートが必要なのか、なぜ RTTI が必要なのか、なぜ他のものが必要なのか? それは単に言語をクールにするためなのでしょうか?これはまったく当てはまりません。C++ のすべての機能には、いくつかの本当の理由があります。C++ をよく学ぶためには、C++ がこのように設計されている理由を理解する必要があります。時間があるときに「C++ Evolution and Design」という本を読んでください。
- C++ の本をたくさん読みましょう。
- Java言語と比較してください。Java は、未成熟な言語である C++ に対して多くの調整、仕様、制限を加えています。そこで、Java と C++ を比較し、C++ では実行できるのに Java では実行できないことがある理由を考えてみましょう。例: Java 例外をキャッチする必要があります。キャッチしないとコンパイルが失敗します。なぜ Java は演算子のオーバーロードを提供しないのですか? なぜ Java は多重継承のためのインターフェースを導入するのでしょうか? Java には C++ のような I/O 文字ストリームがないのはなぜですか? なぜ Java はポインタをサポートしないのですか? なぜ Java はガベージ コレクションを行うことができるのでしょうか? 等 Java はオブジェクト指向設計のさまざまな要素を体現しているため、Java を学習すると、C++ をより適切に使用してプログラミングする方法を学ぶことができます。
- オブジェクト指向設計。プログラミングはデザイン パターンを中心とすることはできませんが、デザイン パターンを使用して切り離す必要があります。
- クラスライブラリ学習。MFC が Windows API をカプセル化する方法、ACE がどのようにオブジェクト指向であるかを見て、Boost がどのようにオブジェクト指向であるかを見て、CPPUnit がどのように設計されているかを見てください。Java の JDK にはあまりにも多くの設計パターンがあり、参照することができます。
原文:C++言語を上手に学ぶ方法by Chen Hao CoolShell