C ++オブジェクト指向の高度な開発(Hou Jie)
主にHouJie氏のクラスを聞いてメモを取るc++の体系的な研究
C++プログラミング入門
C++の進化
本の推奨事項:
「効果的なC++」
「Stlソースコード分析」
データと関数に関するCとC++
cタイプ(組み込み、構造体)を使用して変数を
作成するC ++クラス、構造体(メンバーと関数を含む)を使用してオブジェクトを作成する
クラスの古典的な分類:ポインターあり(複数形)とポインターなし(文字列)
オブジェクトベースとオブジェクト指向
オブジェクトベース:単一クラス
の設計オブジェクト指向:複数のクラスの設計、クラス間の関係。
C++プログラムの基本的なコード形式
.h( "")+ .cpp + .h(標準ライブラリ、<>)
cおよびc++出力
coutとprintf
ヘッダーファイルのガード宣言
これは最初の参照に対してのみ定義され、定義されている場合にのみ繰り返し参照されます。
#ifndef __header_name__
#define __header_name__
#endif
ヘッダーファイルのレイアウト
#ifndef __header_name__
#define __header_name__
1.前置声明
class ostream;
class complex;
2.类-声明
class complex
{
}
3.类-定义
complex::function..
#endif
クラス宣言
class complex //class head
{
//class body
}
テンプレートの紹介
レンプレート
コンストラクタ
インライン関数
インライン関数はクラス本体で定義されています。
機能:より高速に実行されます。関数本体は単純です
(インライン化するかどうかを決定するのは最終的にコンパイラー次第です)
(コンパイラーは自動的にインライン最適化を実行します)
アクセスレベル
パブリックパブリック機能は状況に依存します
プライベートプライベートデータメンバーは
保護を保護します
違いを使用する
コンストラクターコンストラクター
同じ名前を付けます。戻り値のタイプは必要ありません。
コンストラクター用の特別な構文初期化リスト
2つの段階:初期化、割り当て
単純な違い:割り当てプロセスが異なり、効率を向上させることができます
ポインタのないほとんどのクラスは、デストラクタを作成する必要はありません。
コンストラクターは多くの(オーバーロードされた)を持つことができます
コンパイラの観点からのオーバーロード
コンパイラは、2つの名前を形成する関数をコンパイルします
パラメータの受け渡しと戻り値
デザインパターン:プライベートに配置されたシングルトンシングルトンクラス
コンストラクターは、外部がオブジェクトを作成することを許可しません
constメンバー関数
関数の後にconstを追加します->データの内容を変更せずにデータを取得します
パラメーターの受け渡し:値による受け渡し(パラメーター)と参照による受け渡し(constへ)
値の受け渡し、ポインタの受け渡し、参照による受け渡し
基礎となる実装への参照はポインター定数です
参照&は、ポインタを渡すのと同じ速さで内部にあります。
(Hou Jie氏:良い習慣:参照を渡す方が良いです)元の参照値を変更したくない
場合は、 const name&を使用してください。
パラメータ1バイト/2バイト:正式なパラメータにすることができます
戻り値の受け渡し:値による戻りと参照による戻り(constへ)
可能であれば戻り値->参照渡し
friend(友元)
フレンド機能は、フレンドのプライベートデータメンバーを自由に取得できます
フレンド関数は外部関数であり、メンバー関数ではありませんが、同じ権限で、すべてプライベートデータメンバーにアクセスできます
同じクラスの各オブジェクトは、お互いの友達(友達)です。
クラス本体外の定義
いつ参照を返すことができますか?
どのような状況で参照により戻ることができますか
- 関数操作の結果の保存場所。新しく作成されたローカル変数の場合、参照は使用できません。
- 関数が終了した後、操作結果が存在する場所(つまり、元の場所)は解放されません。参照の受け渡しを使用できます。
演算子のオーバーロードと一時オブジェクト
演算子のオーバーロード-1つの演算子のオーバーロードメンバー関数this
コンパイラは演算子のオーバーロードをどのように処理しますか?
すべてのメンバー関数には非表示のパラメーターがあります。これは、呼び出し元オブジェクトを指すポインターです。
オーバーロードされた関数は、メンバー関数または非メンバー関数にすることが
できます<<非メンバー関数としてのみ記述できます
通行人は、受信者が参照の形式で受信されたことを知る必要はありません
非メンバー関数シンボルのオーバーロード
一時オブジェクトtypename();
関数内に一時オブジェクトが作成され、関数を離れると破棄されます。戻り値を参照することはできません。
–>値で返す
クラス名typename()、->一時オブジェクトを作成します-> int()キャストに似ていますか?
気をつけて
- constを追加するかどうかを検討する
- 参照で渡す
- 参照を使用するかどうかを返します
- プライベートのデータ
- 機能の場所
複雑なクラスの実装プロセスを確認する
関数がconstを追加するかどうかを検討します