MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
C++の基礎 - クラスのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
C++の基礎 - クラス
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == <br><br> == staticメンバ == ==== staticメンバ変数 ==== クラスのメンバ変数に<code>static</code>を付加することにより、staticメンバ変数となる。<br> <br> staticメンバ変数は、クラスの定義に記述しただけでは定義したことにならないため、実体となる定義をクラス定義と同じスコープに記述する必要がある。<br> <syntaxhighlight lang="c++"> class CSampleClass { static 型名 メンバ変数名; // 宣言 }; 型名 CSampleClass::メンバ変数名; // 定義 </syntaxhighlight> <br> staticメンバ変数は、オブジェクトを生成せずにプログラムの開始時に既に存在しているため、自動的にゼロで初期化される。<br> ただし、staticメンバ変数の型が、<code>const</code>な整数型、または、<code>const</code>な<code>enum</code>型の場合に限り、宣言と同時に初期化子を与えることができる。<br> <br> <syntaxhighlight lang="c++"> class CSampleClass { private: enum E { e1, e2 }; static const int ci = 100; // OK static const E ce = e1; // OK static const double cf = 1.0; // コンパイルエラー static int i = 100; // コンパイルエラー static E e = e1; // コンパイルエラー }; </syntaxhighlight> <br> コンパイルエラーになるパターンでは、定義時に初期化子を与える必要がある。<br> <syntaxhighlight lang="c++"> class CSampleClass { private: enum E { e1, e2 }; static const int ci = 100; // OK static const E ce = e1; // OK static const double cf; static int i; static E e; }; const double CSampleClass::cf = 1.0; // OK int CSampleClass::i = 100; // OK CSampleClass::E CSampleClass::e = CSampleClass::e1; // OK </syntaxhighlight> <br> <br><br> == staticオブジェクト == staticクラスは、自動的にゼロで初期化された後、staticクラスが宣言された箇所が初めて実行される時にコンストラクタが呼び出される。<br> <br> staticで宣言したクラスの場合、任意の関数が終了してもデストラクタは呼び出されない。<br> staticクラスのデストラクタは、ソフトウェア終了直前に呼び出される。<br> <syntaxhighlight lang="c++"> void func() { static CSampleClass clsSample; } // オブジェクトclsSampleは削除されないため、CSampleClassクラスのデストラクタは呼び出されない </syntaxhighlight> <br><br> == 実体化の禁止 == C++11以降では、デフォルトコンストラクタとデストラクタに<code>delete</code>キーワードを指定することにより、実体化を禁止することができる。<br> メンバに<code>delete</code>キーワードを指定する場合は、<code>public</code>に記述することがセオリーである。<br> <syntaxhighlight lang="c++"> // C++11以降 class CSampleClass final { public: CSampleClass() = delete; ~CSampleClass() = delete; public: static int Add(int x, int y) { return x + y; } }; </syntaxhighlight> <br> Visual C++では、<code>abstract</code>キーワードが使用できるため、<code>abstract sealed</code>または<code>abstract final</code>を指定することにより、<code>static</code>クラスを記述することができる。<br> ただし、その場合は、他のプラットフォームではそのまま移植できないことに注意が必要となる。<br> <br> また、Visual C++では、コンパイルオプションに<code>/permissive-</code>を付加することにより、独自拡張を無効化することもできる。<br> <br><br> __FORCETOC__ [[カテゴリ:C++]]
C++の基礎 - クラス
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse