C ++オブジェクト指向の高度な開発(Hou Jie)

C ++オブジェクト指向の高度な開発(Hou Jie)

主にHouJie氏のクラスを聞いてメモを取るc++の体系的な研究

C++プログラミング入門

C++の進化

本の推奨事項:
「効果的なC++」

「Stlソースコード分析」

データと関数に関するCとC++

cタイプ(組み込み、構造体)を使用して変数を
作成するC ++クラス、構造体(メンバーと関数を含む)を使用してオブジェクトを作成する

画像-20220427095344037

クラスの古典的な分類:ポインターあり(複数形)とポインターなし(文字列)

オブジェクトベースとオブジェクト指向

オブジェクトベース:単一クラス
の設計オブジェクト指向:複数のクラスの設計、クラス間の関係。

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
}


テンプレートの紹介

レンプレート

コンストラクタ

インライン関数

インライン関数はクラス本体で定義されています。
機能:より高速に実行されます。関数本体は単純です
(インライン化するかどうかを決定するのは最終的にコンパイラー次第です)
(コンパイラーは自動的にインライン最適化を実行します)

アクセスレベル

パブリックパブリック機能は状況に依存します
プライベートプライベートデータメンバーは
保護を保護します

違いを使用する

画像-20220427100007930

コンストラクターコンストラクター

同じ名前を付けます。戻り値のタイプは必要ありません。

画像-20220427100953700

コンストラクター用の特別な構文初期化リスト

2つの段階:初期化、割り当て

単純な違い:割り当てプロセスが異なり、効率を向上させることができます

ポインタのないほとんどのクラスは、デストラクタを作成する必要はありません。

画像-20220427101339594

コンストラクターは多くの(オーバーロードされた)を持つことができます

コンパイラの観点からのオーバーロード

コンパイラは、2つの名前を形成する関数をコンパイルします

パラメータの受け渡しと戻り値

デザインパターン:プライベートに配置されたシングルトンシングルトンクラス
コンストラクターは、外部がオブジェクトを作成することを許可しません

画像-20220427102003705

constメンバー関数

関数の後にconstを追加します->データの内容を変更せずにデータを取得します

パラメーターの受け渡し:値による受け渡し(パラメーター)と参照による受け渡し(constへ)

値の受け渡し、ポインタの受け渡し、参照による受け渡し

基礎となる実装への参照はポインター定数です

参照&は、ポインタを渡すのと同じ速さで内部にあります。
(Hou Jie氏:良い習慣:参照を渡す方が良いです)元の参照値を変更したくない
場合は、 const name&を使用してください。

パラメータ1バイト/2バイト:正式なパラメータにすることができます

戻り値の受け渡し:値による戻りと参照による戻り(constへ)

可能であれば戻り値->参照渡し

画像-20220427203509047

friend(友元)

フレンド機能は、フレンドのプライベートデータメンバーを自由に取得できます

フレンド関数は外部関数であり、メンバー関数ではありませんが、同じ権限で、すべてプライベートデータメンバーにアクセスできます

画像-20220427203714465

同じクラスの各オブジェクトは、お互いの友達(友達)です。

画像-20220427203916858

クラス本体外の定義

いつ参照を返すことができますか?

どのような状況で参照により戻ることができますか

  • 関数操作の結果の保存場所。新しく作成されたローカル変数の場合、参照は使用できません。
  • 関数が終了した後、操作結果が存在する場所(つまり、元の場所)は解放されません。参照の受け渡しを使用できます。

演算子のオーバーロードと一時オブジェクト

演算子のオーバーロード-1つの演算子のオーバーロードメンバー関数this

コンパイラは演算子のオーバーロードをどのように処理しますか?

すべてのメンバー関数には非表示のパラメーターがあります。これは、呼び出し元オブジェクトを指すポインターです。

画像-20220427204946549

オーバーロードされた関数は、メンバー関数または非メンバー関数にすることが
できます<<非メンバー関数としてのみ記述できます
通行人は、受信者が参照の形式で受信されたことを知る必要はありません

非メンバー関数シンボルのオーバーロード

一時オブジェクトtypename();

関数内に一時オブジェクトが作成され、関数を離れると破棄されます。戻り値を参照することはできません。

–>値で返す

クラス名typename()、->一時オブジェクトを作成します-> int()キャストに似ていますか?

気をつけて

  • constを追加するかどうかを検討する
  • 参照で渡す
  • 参照を使用するかどうかを返します
  • プライベートのデータ
  • 機能の場所

複雑なクラスの実装プロセスを確認する

関数がconstを追加するかどうかを検討します

おすすめ

転載: blog.csdn.net/chuxuezhe8483/article/details/124460984