制限され、主に書かれた表現の抜粋の教科書では、一緒に自分自身の適応を追加することによって部分的に教科書ソース、vs2019のすべてのコードがコンパイルされることにより、
操作の定義されたタイプ
クラスTdate { パブリック: ボイド セット(INT M、INT D、int型の Y){月= M。日= D; 年= Y; } INT ISLEAPYEAR() { リターン(年%4 == 0 &&年%100 =!0)||(年%400 == 0 )。} 無効 印刷(){coutの<<今年<< " " <<月<< " " <<日<< てendl; } プライベート: INT 月。
int型 日;
int型の 年。 }。
上記に定義された時間のクラスは、クラスのメンバとメンバ関数が存在することが分かるが、このクラスで定義されたメンバ関数は、外側のクラスで定義されてもよいです
クラスのメンバ関数ではインライン関数のリンクを学習に対処するためのインライン関数として定義されています。
通常の関数として定義される外側のメンバ関数で
この場合は、コードを提供するために露出されなくてもよいように、クラス外で定義された我々は、クラス宣言内で定義されるべき良好なプログラミング方法、に応じて、当然の書籍を、実施例である実装外部インタフェース
#ifndefのTdate_H
の#define Tdate_H
//Tdate.h
する#include <iostreamの>
のstd :: cinをを使用しました。
std :: coutのを使用して、
std ::を使用してendl;
クラスTdate
{
パブリック:
無効セット(int型メートル、int型D、int型のy);
int型 ISLEAPYEAR();
無効印刷();
プライベート:
int型月。
int型日;
int型の 年。
}。
#endifの
// Tdate.cpp用 の#include " Tdate.h " ボイド Tdate ::セット(INT M、INT D、int型のY) { 月 = M。日= D; 年= Y; } INT Tdate :: ISLEAPYEAR() { リターン(年%4 == 0 &&年%100!= 0)|| (年%400 == 0 ); } 無効 Tdate ::印刷() { coutの <<今年<< " " <<月<<" " <<日<< てendl; }
最後に、私たちは、主な機能を実現します
// main.cppに する#include <入出力ストリーム> の#include " Tdate.h " int型のmain() { Tdate。 a.Set(10、16、2003 )。 a.Print(); }
コンパイル結果にF5
キーワード公共のメンバーによる意思決定の性質上、保護された、プライベート
パブリックパブリックパブリックセグメントのメンバーは、外部インターフェイスに提供され
クラスとその派生クラスで保護セグメントを可視メンバーを保護保護
クラスでは見え民間民間民間メンバーのみセクション
各セグメントは、メンバ関数も含んでもよく、両方のデータメンバーを含んでいてもよいです
パブリックにプライベート、メンバ関数インタフェースにデータを置くためのより良いです
クラスは、いくつかのケースで定義されています
例えば、クラスは、Aクラスのポインタに定義することができます。
// 例: クラスの リンク {
リンク * 次の;
// ...... };
第二のデータ・タイプは、第一のクラスにクラスで定義されてもよいです
クラス X { // ... }; クラス Y {Xデータメンバー。 // ...... };
しかし、ここでは避けるべき状況があります
クラス X- { // X-データメンバー;この場合、間違ったが、無限の再帰を有することになる // ... };
Xクラスは、クラスXへのポインタを持つことができますなぜ、Xクラスのデータメンバは、それを持つことができませんか?
ポインタのサイズが一定であるので!ポインタの大きさは、実際にCPUアドレスのビット数ではなく、ワードによって決定されます。32ビット・ポインタ・サイズのビットのCPUのCPUポインタサイズ4bと、対象データのアドレスに格納されているポインタから64ビット8B(センス、32ビットアドレッシングのCPU32に、64ビット幅64は、アドレスの幅)(参照https://blog.csdn.net/lhj_168/article/details/80308041)であります
そして、また、空のクラスを定義することができ、名前のクラスは、一般的に、推奨されません書いてはいけません
ここで、空のクラスコンパイル時にコンパイラが自動的にバイトを追加します
クラス} {空にする。 クラステスト { INT 。 文字B; }。
<< COUT はsizeof(空); // クラスのコンパイラ扱う各時間インスタンス COUT << ENDL、 COUT << のsizeof(テスト)。
1,8空のクラスコンパイラが自動的に1バイトの識別子を追加するための理由8は、C ++コンパイラである、(識別子が付加されていない場合のものがある場合)、実行した結果でありますアラインされたアドレス(メモリサイズ基準:HTTPS://blog.csdn.net/qinghezhen/article/details/9100079)(登録基準:HTTPS://my.oschina.net/u/185531/blog/2222034)とこれが理由コンパイラで、関心のある読者が自分を確認することができ、我々は結論にジャンプすることができない、一時的なコンパイラの理論を知りませんでし揃えます
クラス、および使用外側メンバーまたはメンバー関数を使用「」、「 - >」(後者ポインタ)
6.1.3これは、より重要なポインタであるため、別の話を開くには、この指標を紹介します