トピックから外れています
新しいことを学ぶことは、時間内にまとめられるべきです、さもなければ、それらはすぐに忘れられるでしょう。まとめの過程で、私たちは自分の言語と考え方を整理し、個人の表現スキルを向上させます。単純なことをするのは簡単ではない、女の子に来てください〜
7月にC ++の学習を始めました。当時、デジタル画像処理と機械学習に関連するコンテストに参加しました。C++で書かれた優れたコードはたくさんありましたが、理解できず、改善する方法はありませんでした。ゲームの結果はひどかった。だから、この魔法の効率的なプログラミング言語を学ぶ決心です〜一方で、就職活動の準備もしていますが、結局のところ、オブジェクト指向プログラミングは優れたプログラミング手法です。考えることは、将来、他のプログラミング言語(MATLAB、Pythonなど)の実際的な問題を意識的に解決するためにも使用できます。
Larry Ullman、Andreas Signerの「C ++ Book for Everyone」、およびGuan HaoとAn Zhiyongの「C ++は、古い鳥による迅速な通関手続きを学ぶのが難しくなくなりました」の一部を読み終えました。これら2冊の本のタイトルを見ると、これは基礎がゼロの人向けの入門書であることがわかります。しかし、始めることは本当に重要です!!!最初は、詳細について心配する必要はありませんが、プログラミングのアイデアを理解することに集中する必要があります。もちろん、基本的なハンズオン能力はまだ必要ですので、怠惰にしないでください、プログラミング能力が実践されています〜
以下は、将来の参考のために新しく学んだことの要約です。
テキスト
1準備
プログラミングの過程で多くの問題が発生する可能性がありますが、解決できない場合は、検索エンジンや技術フォーラムを利用することを考えることがよくあります。詳細については、エリックスティーブンレイモンドが作成した「スマートな方法で質問する方法」(http://catb.org/~esr/faqs/smart-questions.html)を参照してください。
C ++でプログラムを作成するには、通常、複数のステップが必要です。このプログラムの目的とニーズを明確にする->プログラミング->コンパイル、リンク->(デバッグ、デバッグ、デバッグ...)->コンパイル、リンク->実行。独自の統合開発環境に適したIDEを選択すると、プログラミングの効率が大幅に向上します。私はDev-C ++を使用しています。
2 データ型、基本構文、制御構造
一般的なデータ型は、整数、実数、配列、文字、文字列、ポインター、構造体、および共用体です。
C ++には、プログラムに対するより厳しい文法要件があります。小さなセミコロンと括弧内の非対称性がないと、エラーが報告されるため、適切なプログラミングの習慣を身につけ、低レベルのエラーを回避する必要があります。
変数と関数を使用する前に、必ず宣言または定義してください。
変数のタイプとスコープは慎重に検討する必要があり、基本的な機能を完了することを前提として、コードはできるだけ最適化する必要があります。
制御構造には、条件付きif(-else)、3項演算子(?:)、複数の条件(switch)、ループ(while、for)が含まれます。
3入力、出力、ファイル
各プログラムの本質はデータを処理することであり、多くのデータはユーザー入力またはファイルからの読み取りを必要とします。処理後、結果を表示し、それをインタラクティブインターフェイスに出力するか、ファイルとして保存する必要があります。
入力データの合法性を必ず確認してください。データを複数回入力する必要がある場合は、バッファの残りを削除してください。
ファイルを読み書きするときは、ファイルが実際に開かれているかどうかを確認してください。
4個人的な機能を定義する
入力パラメーターを使用して関数を作成する関数に渡される値は、正しいタイプと順序である必要があります。関数を定義するときは、すべての必須パラメーターをオプションパラメーターの前に配置する必要があります。
インライン関数はプロトタイプを定義する必要はありません。関数全体がメイン関数の前に定義されます。
関数のオーバーロードは、同じ名前で同じ目的を持つ、異なるパラメーター(異なるデータ型または異なる数のパラメーターを持つことができる)を使用して関数を定義することです。
関数呼び出しにはいくつかのタイプがあります。値による転送、アドレスによる転送、参照による転送です。
5つのオブジェクトとクラス
(ルーチン1
#include
#include
//基类
class Pet{
public:
Pet(std::string theName);
~Pet();
virtual void eat();
virtual void sleep();
virtual void play()=0;//虚方法 //=0抽象方法 如果一个类中有一个抽象方法,那么必须至少还有一个普通的虚方法
static int getCount(); //静态方法
//void setName(std::string theName);
protected://允许这个类和他的子类来访问以下属性和方法
std::string name;
friend class PetRenamer;//友元关系声明 (应该在没有其他办法时才使用友元关系,友元关系太多往往表示设计方案有缺陷)
private:
static int count; //静态属性
};
Pet::Pet(std::string theName){
name=theName;
count++;
std::cout<<"Creating a pet named '"<name;
std::cout<<" to "<name=newName;
}
//子类1
//继承时的保留字public、protected、private与类的声明中含义不同
class Cat:public Pet{
public:
Cat(std::string theName);
void climb();
void play();
};
//继承机制中的构造器
Cat::Cat(std::string theName):Pet(theName){
}
void Cat::climb(){
std::cout<sleep();
cat->eat();
cat->play();
std::cout<<"\n";
dog->sleep();
dog->eat();
dog->play();
delete cat;
delete dog;
return 0;
}
)
小学校
オブジェクトプログラミングはC ++の中核です。オブジェクトを新しいデータ型として理解できます。違いは、オブジェクトには変数(属性)だけでなく、関数(メソッド)も含まれていることです。
クラスの宣言では、通常、3つの予約語public、protected、privateの1つを属性とメソッドの前に追加して、そのアクセシビリティを制御する必要があります。
メソッドは互いに呼び出すことができます。
コンストラクタとデストラクタは特別な種類のメソッドです。
このポインタ
中級
クラス継承メカニズム:このメカニズムにより、プログラマーはクラス階層を作成でき、各サブクラスはその基本クラスで定義されたメソッドとプロパティを継承します。つまり、既存の信頼できるコードを継承メカニズムによって拡張できるため、開発効率が大幅に向上します。
継承メカニズムで使用されるコンストラクタとデストラクタの構文に注意してください。
場合によっては、オーバーライドメソッドは基本クラスで一般的な機能を提供する必要がありますが、サブクラスでのこのメソッドの実装を変更する必要があります。
オーバーロードの方法 は、関数のオーバーロードと同じです。
友情 完全に無関係なクラスは、保護されたメンバーまたはプライベートメンバーにアクセスする必要があります。クラスの友達は、クラス宣言に記述されている、それ自体で選択されます。友達の関係を乱用しないでください。
上級
静的プロパティと静的メソッド は単一のオブジェクトに属していませんが、クラス全体のプロパティとメソッドに属しています。利点:予約語を使用してアクセス権を制御できます。オブジェクトを作成せずにメンバーにアクセスできます。特定のデータを作成できますこのクラスのすべてのオブジェクト間で共有されます。静的メソッドで非静的プロパティにアクセスすることはできません。静的プロパティにメモリを割り当てることを忘れないでください(つまり、クラス宣言の外で静的プロパティを宣言します)。
仮想メソッド はサブクラスのメソッドをオーバーロードしますが、新しいメソッドによってサブクラスオブジェクトが生成されると、基本クラスへのポインターが使用されます。メソッドが呼び出されると、基本クラスのメソッドが呼び出されます。ルーチンを確認する方が簡単です。すべてのメソッドを基本クラスの仮想メソッドとして宣言すると、最終的な実行可能コードの速度が低下しますが、プログラムが期待どおりに動作することを確認できます。マルチレベルのクラス継承関係を実装する場合、最上位の基本クラスには仮想メソッドのみを含める必要があります。
抽象メソッド は、このメソッドが必須であることをコンパイラーに伝えますが、(この基本クラスでは)そのメソッドの実装を提供することはできません。抽象メソッドを使用するには、基本クラスに実装する必要があります。注意すべき詳細が1つあります。クラスで抽象メソッドを使用するには、少なくとも1つの通常の仮想メソッドが必要です。
多くの異なるデータ型を処理できる多態性関数
オーバーロードされた演算子の 目的は、コードを読みやすくして理解しやすくし、元の意味を失わないようにすることです。メイン関数の前に宣言し、メイン関数の後に実装します。
多重継承 サブクラス継承二つ以上のベースクラス。
仮想継承 は、現在のクラスから派生したサブクラスがその基本クラスのインスタンスを1つだけ持つことができることをコンパイラーに通知します
6動的メモリ管理
動的メモリを使用すると、プログラマは特定のニーズに応じて拡張または縮小できるさまざまなデータ構造を作成して使用できます。別の用途は、メモリブロックへのポインタを返す関数(ファクトリ関数)です。
動的メモリは、アドレスのみで名前のないメモリブロックで構成されているため、ポインタを使用してそれらにアクセスする必要があります。動的に割り当てられたメモリブロックにはスコープがありませんが、アドレスの格納に使用されるポインタ変数にはスコープがあります。
動的メモリの適用と解放。deleteステートメントは、ポインタが指すメモリブロックのみを解放しますが、ポインタはまだそこにあります。
オブジェクトを動的に作成および使用する場合は、メソッドを仮想メソッドとして宣言することを忘れないでください。
コピーコンストラクターと代入演算子アプリケーションの機会-> 2つのオブジェクトがコピーされますが、それらにはポインター型のメンバーが含まれます。少しずつコピーすると、ポインターが隠れてしまう危険があります。ポインタ属性を持つクラスを宣言し、そのメモリをデストラクタで解放する限り、コピーコンストラクタと割り当て演算子を実装する必要があります。コピーコンストラクタがすべての属性をコピーすることを確認する必要があります。静的オブジェクト強制/動的オブジェクト強制は、オブジェクトを処理するときに常にdynamic_cast演算子を使用するのが最適です。次に進む前に、結果がNULLかどうかを確認してください。
7名前空間とモジュール性
ヘッダーファイルはシステムヘッダーファイルとカスタムヘッダーファイルに分割され、関数宣言、ユーザー定義データ型(構造体とクラス)、テンプレート、およびグローバル定数を保存します。最も必要なコードのみを含めます。インポート時にこれらを使用しないようにしてください絶対パス。これはコードの移植性を低下させるためです。
実装ファイルユーザーは、関数の基本的な使用法などを理解するためにヘッダーファイルを参照してください。コンパイラーの場合は、各関数またはクラスがどのように実装されるかを確認する必要があります。実装ファイルの名前はヘッダーファイルと一致している必要があります。
Cプリプロセッサは、Cアプリケーションを開発して実行を高速化するために人々が作成したツールです。
名前空間はユーザー自身が定義します。同じ名前空間内のものは、この名前空間内で一意にすることができます。namespaceキーワードを使用して、同じファイルまたは別のファイル内の名前空間に新しいものを追加できます。ネームスペースを使用するもの(何も記述せず、ネームスペースの名前を記述するだけではありません。これは不可能ではありません)、usingディレクティブまたは宣言の場所によって、ネームスペースから抽出されたものが使用できるスコープが決まります。
リンク、スコープ、ストレージクラスの3つの概念は相互に関連していますが、観察の角度と問題の説明は異なります。複数のファイルが同時にコンパイルされる場合、各ファイルは翻訳単位と呼ばれ、各翻訳単位で定義されたものが別の翻訳単位で使用されるかどうか、およびその使用方法は、リンクが機能する場所です。外部リンク(変数が存在する限り、各翻訳単位にアクセスできます)、内部リンク(翻訳単位内)に分割されます。定義されたものは翻訳単位でのみ使用でき、接続はありません(関数で定義された変数は関数内にのみ存在します)。各変数には、プログラムがコンピューター上で変数の値を格納する場所と方法、および変数のスコープを決定するストレージクラスがあります。
8テンプレート
C ++プログラミングパラダイム:手続き型パラダイム(プログラムをさまざまな関数に分割)、オブジェクト指向パラダイム(コードとデータをさまざまなクラスに編成し、クラス間の継承関係を確立する)、一般的なプログラミング(特定の関数やクラスではなく、関数やクラスのテンプレートを作成するプログラマーをサポートします。1つのソリューションで複数の問題を解決できます〜)
独自の汎用コード関数テンプレートを記述して使用(関数テンプレートをプロトタイプと実装に分割しないでください);クラステンプレート(上記と同じ);インライン表記を使用して、コンパイラーが実装を見つけてプログラムを読み取り可能にするより高い
標準テンプレートライブラリSTL
コンテナとアルゴリズムコンテナは、2つ以上の値を保持できる数値構造です。さまざまな問題がさまざまなコンテナに適しています。独自に作成することも、C ++標準テンプレートライブラリ(STL)を呼び出すこともできます。注意深く設計およびテストされた多くのものがあります。既製のコンテナー。最適なコンテナーを見つけることはプログラミング作業の一部にすぎず、そのコンテナー内のデータを処理するためにいくつかの関数(アルゴリズム)が必要です。STLは、さまざまな一般的な問題を解決するために、よく考えられ、厳密にテストされた多くのアルゴリズムも提供します問題です。STLで一般的に使用されるアルゴリズムの詳細は、オンラインで見つけることができます。
上記は最初のリファレンスブックのほとんどの内容ですが、これらの基本的な概念を習得したら、簡単なC ++アプリケーションを作成できます。しかし、多くの細部は自分でやる前に気付かれないので、それでももっとやらなければならない〜