Cpp クラス const 新しいページはコチラ

提供: yonewiki
移動: 案内, 検索
(constメンバ関数内からメンバ関数呼び出し)
 
1行: 1行:
 +
[[C PlusPlus#C++からの技術|C++]]に戻る
 +
 +
 
<table class="mbox-small" style="border:1px solid #aaa; background-color:#f9f9f9; width:22em;" id="RealTitleBanner">
 
<table class="mbox-small" style="border:1px solid #aaa; background-color:#f9f9f9; width:22em;" id="RealTitleBanner">
 
<tr>
 
<tr>
 
<td style="width:1px;"></td>
 
<td style="width:1px;"></td>
<td class="mbox-text plainlist" style="">本来の表記は「<b><span id="RealTitle" style="font-size:large;">C++ クラス const</span></b>」です。この記事に付けられた題名は{{記事名の制約}}から不正確なものとなっています。</td>
+
<td class="mbox-text plainlist" style="">本来の表記は「<b><span id="RealTitle" style="font-size:large;">C++(Cpp) クラス const</span></b>」です。この記事に付けられた題名は{{記事名の制約}}から不正確なものとなっています。</td>
 
</tr>
 
</tr>
 
</table>
 
</table>
8行: 11行:
 
<br />
 
<br />
 
== '''クラス const''' ==
 
== '''クラス const''' ==
 +
 
クラスとconstキーワードの関係について、この項目で記述したいと思います。変数で使っていたconstキーワードとはまた違った使い方をしますが、基本的な理念は同じです。つまりは変数の中に格納した値を初期化や初期値から変更されないように定数化・保護するということを目的としています。変えられたくない。変えられると動かなくなる。とか、変えられても大丈夫なようにチェックするということから解放されたい。こういったプログラマの都合により使われるキーワードです。
 
クラスとconstキーワードの関係について、この項目で記述したいと思います。変数で使っていたconstキーワードとはまた違った使い方をしますが、基本的な理念は同じです。つまりは変数の中に格納した値を初期化や初期値から変更されないように定数化・保護するということを目的としています。変えられたくない。変えられると動かなくなる。とか、変えられても大丈夫なようにチェックするということから解放されたい。こういったプログラマの都合により使われるキーワードです。
  
178行: 182行:
  
  
==const外し(const_cast)==
+
==const外し(const_cast) or const戻し==
 
const_castを使うといろいろな場面でconstで指定されている変数(ポインタ変数やオブジェクトも含める)であったものをconst無しの扱いに変更が出来ます。それじゃ、constでは保護されないじゃん。なんじゃそりゃ。って思うやもしれませんが、constというものはそういうものです。では、どれくらいのことがやれるのか試してみましょう。
 
const_castを使うといろいろな場面でconstで指定されている変数(ポインタ変数やオブジェクトも含める)であったものをconst無しの扱いに変更が出来ます。それじゃ、constでは保護されないじゃん。なんじゃそりゃ。って思うやもしれませんが、constというものはそういうものです。では、どれくらいのことがやれるのか試してみましょう。
  
346行: 350行:
  
  
もちろん、constメンバ関数が用意されていなければ、コンパイルエラーになります。
+
constメンバ関数が用意されていなければ、コンパイルエラーになります。
 +
 
  
 
で、★31が実行されるには、★30.の部分の呼び出しがconstではないオブジェクトから呼ばれたことにすればよいことになります。そのようにするには以下のように★30.部分を書き換えます。
 
で、★31が実行されるには、★30.の部分の呼び出しがconstではないオブジェクトから呼ばれたことにすればよいことになります。そのようにするには以下のように★30.部分を書き換えます。
 +
 +
 
Const001.cpp
 
Const001.cpp
 
<syntaxhighlight lang="cpp" line start="1">
 
<syntaxhighlight lang="cpp" line start="1">
387行: 394行:
  
 
このことから、constとして生成されたオブジェクトからconstメンバ関数を呼ばれたときのメンバ関数内でのthisポインタの型はconst CConst001*のように constが付与されたポインタのように振る舞うことが分かります。
 
このことから、constとして生成されたオブジェクトからconstメンバ関数を呼ばれたときのメンバ関数内でのthisポインタの型はconst CConst001*のように constが付与されたポインタのように振る舞うことが分かります。
 
(鋭意執筆中)
 
  
  
 
長い文章になってしまいましたが、概ねの説明は完了です。
 
長い文章になってしまいましたが、概ねの説明は完了です。
 +
 +
 +
[[C PlusPlus#C++からの技術|C++]]に戻る

2021年2月6日 (土) 00:00時点における最新版



個人用ツール
名前空間

変種
操作
案内
ツールボックス