このセクションでは、以下に精通し、クラスの予備的な理解である:
1.クラスとは何ですか?オブジェクトとは何ですか?オブジェクト指向およびプロセス指向の違いは?
2.どのようにクラスを定義するには?構造体は、クラス定義とクラスとクラスの違いによって定義されていますか?
3. C ++どのパッケージを実装するには?
スコープの4クラス:クラスの定義を理解するためにどのように、あなたはスコープを定義しますか?
クラスがインスタンス化される:なぜ我々は、彼らがコンテンツを保存することができます前に、クラスをインスタンス化する必要がありますか?
6.どのようにクラスのサイズを取得しますか?どのくらいのスペース授業時間の大きさ、そしてなぜ?追加:メモリ配置構造とは何ですか?なぜ我々は、メモリのアライメントが必要なのでしょうか?アライメントパラメータを設定するには?の構造に対してオフセット開始位置を構造化する方法を知っていますか?最後のサイズは?どのようなシナリオでは、アカウントに最後のサイズを取る必要が?検証するには?
7.このポインタは何ですか?このポインタ特性?このポインタは、それを空にすることができますか?このポインタが空で、コードがどのような状況の下で崩壊しなければなりませんか?
1.クラスとは何ですか?オブジェクトとは何ですか?
カテゴリー:形成された共通の特性を持つものの種類(カテゴリ)。物事の共通のプロパティがまとめ一定の共通の属性を持って、その結果は、物事のこれらの種類(カテゴリ)です。説明の生徒、学生番号、氏名、年齢、性別、学年、一緒に要約されているなどの特性として、学生のクラスです。C ++では、クラスは、物事(データ要素)属性記述しているだけでなく、データ要素の初期化及び割り当ての実施形態、および活動、すなわちクラス(クラスが演奏機能によって達成される)、クラスのデータ要素であることができ、関数があり、あるいはクラスなど、クラスの生徒などのクラスがあり、また、クラスの幹部クラスを持つことができます。
オブジェクト:特定の事柄の人々は、そのような学生として、研究、または他の人々や物事をオブジェクトにすることができます。これは、オブジェクトクラスがインスタンス化されています。
リレーションシップクラスとオブジェクト:クラスのインスタンス化の結果がオブジェクトです。オブジェクトクラスの抽象的な記述。モールドタイプは、オブジェクトが鋳造され、金型は対象外です。
プロセス指向とオブジェクト指向の違いは何ですか?
プロセス指向:イベント分析にイベントから物事を説明するものの開発、開発段階、事件を解決するためにどのような手順ANALYZE(問題)必要があり、その後、これらの手順を実装します。彼はステップは、複数の機能に具現コードを定義することを強調し、プレスのステップは、これらの関数を呼び出します。
オブジェクト指向:イベント分析にイベントに関連するオブジェクトから複数のオブジェクトに問題を破るために、どのような行動特性(機能)が強調してきたイベントに関連するオブジェクトの分析オブジェクトとそのイベントの行動特性という。コード宣言において具現化されることは、関連するクラスは、クラスの属性(データ要素)オブジェクトのクラスを定義する定義、機能(関数)によって記述された現象は、オブジェクトとオブジェクトとの間の相互作用によって、その必要性のある対象をインスタンスこの問題を解決します。
2.どのようにクラスを定義するには?構造体は、クラス定義とクラスとクラスの違いによって定義されていますか?
クラス定義:クラスと、クラス定義キーワードである(構造体クラスが定義されてもよい)、クラス名、クラス名、クラス{}体であり、本体は、セミコロンの終了時に、要素を定義し、関数を定義して、友人に宣言することができます。
クラス classNameの // クラスは、クラスのキーワードで、クラス名はクラス名である { // 体は、クラスを括弧ないクラス定義のメンバー }; // 最後のセミコロンと劣ら // 二十から一学生のクラス定義 クラスの学生 { int型同上[ 15 ]; CHAR名[ 10 ]; int型の年齢; int型、性別 }。
C ++ C言語の構造を強化するのクラス、クラスは明確な区別があるCに実際の構造が、構造物である、C ++、C言語の構造は唯一の変数を定義できるようにするが、C ++の構造変数を定義することができ、本体は、関数も定義されてもよいです。
C ++のクラス、定義された要素を、構造体は、デフォルトでは、外部へのアクセス、およびクラス要素定義されたデフォルトのクラスで共有されている(友人を除く)は、外部からのアクセスがない、プライベートです。(C ++クラス定義は、クラスで使用したいです)。Cにおいて、構造は、変数を定義することができます。
3. C ++どのパッケージを実装するには?
包装:データ及び有機結合データの操作方法、隠されたオブジェクトのプロパティと実装の詳細のみ公にインターフェイスと外部世界と対話します。それは本質的に管理です。(私たちは、インターネットサーフィンをするとき、私たちのネットワーク名は公共財産であるなど、私たちは情報の本当の名前、ID番号と、公共のない保護された他のある、他の人が見ることができますが、我々は一般的に他の人々の本当の名前が表示されません画面名公開、情報管理)は、オブジェクトのクラス属性とメソッドと結合し、その目的は、より完璧。選択的に、そのインターフェイスへの外部アクセスを介してユーザに提供され、所定にアクセスするためのアクセス修飾子を使用します。3つのアクセス修飾子があります:1、パブリック(公衆)のメンバーは、クラス外で直接アクセスすることができる修飾されました。図2に示すように、保護(プロテクション)とプライベート(独自の)修飾メンバーは、クラス外で直接アクセスすることはできません。アクセス修飾子の位置からスコープアクセスは、次の訪問修飾子の位置を表示されるように、発生します。クラスのデフォルトのアクセスクラスをプライベート宣言されている構造体がC.と互換性を持つようにするので、このクラスは、publicとして宣言構造体のデフォルトのファイルのパーミッションを訪問します 外部素子構造C.にアクセスすることができます アクセス修飾子は、コンパイル時にのみ有用である、メモリへのマッピングデータ、有意差のアクセス修飾子はありません。これは、コンパイル相上で、アクセス修飾子は仕事ではありません。
クラスの生徒 { パブリック: 学生() {} INT A = 5 ; 保護: プライベート: チャー ID [ 15 ]; CHAR名[ 10 ]; char型性別; int型年齢= 18である; }; int型のmain() { 生徒A; のprintf (" N- \%dの"、AA); // 通常のアクセス // のprintf( "N- \%dの"、a.Id); //は文句を言うでしょうが、アクセスできないa.Id はsizeofを(A)。 リターン 0 ; }
スコープの4クラス:クラスの定義を理解するためにどのように、あなたはスコープを定義しますか?
、クラスメソッド(関数)が属性の集合(データ要素)とオブジェクトのいくつかのタイプを記述し、これらのプロパティおよび方法は唯一のクラスで動作クラス外で使用するクラスのメンバーであり、範囲の解像度を必要とします記号は、メンバーがクラスのドメインに属していることを示しています。
クラスがインスタンス化される:なぜ我々は、彼らがコンテンツを保存することができます前に、クラスをインスタンス化する必要がありますか?
クラスのインスタンス化と呼ばれるプロセスを使用してオブジェクト・クラスを作成します。クラスは、図面を設計することで、クラスの定義、私たちは、空気中の城のように、描画物があったと言うことはできませんし、実際にパイを描くことができない、いくつかの図面を設計することです。だけは本当に肉や野菜とのパイのパイを作ります。(陝西省は、学校に行くが、本当にハンバーガー(QAQ)を食べることが好きではありません)。実際等クラス、ラインint型、文字を格納するためのメモリ空間を割り当てていないクラスを定義する、オブジェクトまたはデータのクラスの特性を記述するために使用されます。オブジェクトをインスタンス化する唯一のクラスは、それはあなたがオブジェクトに各オブジェクトの実際のデータを追加することができ、物理的なストレージ容量を割り当てます。
6.どのようにクラスのサイズを取得しますか?A
クラスのサイズはクラスのメンバ変数とサイズ、注目メモリアライメントの合計です。
どのくらいのスペース授業時間の大きさ、そしてなぜ?
空のクラスサイズはバイトです。一意にクラスを識別するためにNULLバイトのスペースにコンパイラ。
メモリ配置構造とは何ですか?
構造において、一定の規則に従って異なるタイプのメンバ変数のサイズは、特定のサイズの法則を保存するために、記憶のためのメンバ変数を空間を開きます。順序セットに従って構造のデフォルトのアラインメントメンバ変数、バイトの可変数は、すべての変数のサイズの和に等しいか、または整数の倍数である、型バイトの最大数を最小化するように調整されます整数倍。
いくつかの概念上のメモリのアライメントアライメント値:
図1に示すように、自己整合値の基本タイプ:このようなバイトINTチャー及び他の種類の数として組み込み型システムのサイズは、独自の方式のアライメント値です。
図2は、位置合わせは、カスタムタイプ値:内部構造体のメンバ、カスタムアライメント値を入力バイトの最大数のタイプ。
図3に示すように、プログラム指定された位置合わせ値:の#pragmaパックを使用することにより(n)は、手動でサイズNの値である場合2の位置合わせ、及び1,2,4,8等、等を指定する番目。
4、効果的なアライメント値:メモリアライメントは、アライメントがデフォルト値を指定した小さな有効アライメント値である値整列プログラム、と比較されます。
なぜ我々は、メモリのアライメントが必要なのでしょうか?
図1に示すように、異なるプラットフォームのように、異なる読み取りおよび書き込みデータは、互換性のために、メモリのアライメントが行われる必要があります。
図2に示すように、メモリ二つの訪問にアクセスするための作業を行うためのプロセッサ、及び整列するメモリを整列していないジョブにアクセスするとき、プロセッサにのみ使用され、効率を向上させます。
アライメントパラメータを設定するには?
プログラムは、アライメント値を指定:2のパワーの値を手動サイズのアラインメントを指定するための#pragmaパック(n)を使用することにより、N場合、例えば1,2,4,8として等が挙げられます。
の構造に対してオフセット開始位置を構造化する方法を知っていますか?
オフセット構造:アドレス構造のオフセット値に対するメンバ変数の本体の構造。(私自身の理解では、その開始アドレスとメンバ変数の構造体のアドレス間の差があります)。メンバ変数のアドレス構造によって減算されるオフセット開始アドレスを検索します。
最後のサイズは?
ビッグエンディアン:下位バイトデータの下位メモリアドレスに格納されたデータの上位バイトは、中上位メモリアドレスに格納されます。左から右へ、メモリアドレスが増加、私たちの読書習慣は、ビッグエンディアンモードです。12345(何千百10)。
リトルエンディアンモード:高アドレスメモリに保存されている上位バイト、下位メモリアドレスに格納されている低バイトデータ。アドレス、高いアドレス部ウェイト、アドレスの低い重量小さな部分と組み合わせる軽量。古代人は、右から左に読む方法。このような450 32001000(54321)(Shibaiqianwan)など。
どのようなシナリオでは、アカウントに最後のサイズを取る必要が?
あなたは、メモリに格納されたデータを表示すると、我々はデータを読み込みます組み合わせの終わりのサイズを減らすことを検討するために必要でした。
検証するには?簡易認証として、次のように
無効チェック・モード() { int型 A = 0x1234の; char型の B = *(char型 *)&A ; IF(B == 0x12を) { のprintf(" ビッグエンディアンモードの\ N-。" ); } 他 のprintf(" 。リトルエンディアン\ N- " ); } int型のmain() { チェック・モード(); 戻り 0 ; }
7.このポインタは何ですか?
これは、C ++でのキーワードである、それはのconstポインタの変更です。デフォルトのパラメータは、関数が受信側オブジェクトを呼び出し、メンバ関数です。それは現在のオブジェクト、呼び出し元のオブジェクトのメンバ関数、それによってメンバ変数と現在のオブジェクトのメンバ関数へのアクセスを指します。
このポインタ特性?
引数、変更のconstポインタ、デフォルトのパラメータオブジェクトのメンバ関数、コードで書かれていない、現在のオブジェクトをポイントし、それを介して現在のオブジェクトへのアクセスを持ってを渡さないでください。それは唯一の機能ではなく、オブジェクトで使用される関数内で行うことができます。プッシュコンパイル時を経て渡します。あなたは、もはや静的関数を使用することはできません。
このポインタは、それを空にすることができますか?このポインタが空で、コードがどのような状況の下で崩壊しなければなりませんか?
空になることがあり、このポインタで動作していないとき、このポインタがnullの場合もあります。あなたはこのオブジェクトのための手順を参照する使用する必要がある場合でも、エラーが発生します。