「C++の基礎 - コンストラクタ」の版間の差分

ナビゲーションに移動 検索に移動
編集の要約なし
(文字列「</source>」を「</syntaxhighlight>」に置換)
編集の要約なし
 
9行目: 9行目:
デフォルトコピーコンストラクタは、自分と同じクラスのインスタンスを引数とするコンストラクタで、<br>
デフォルトコピーコンストラクタは、自分と同じクラスのインスタンスを引数とするコンストラクタで、<br>
メンバ変数をすべてコピーしたものが新しく生成される。<br>
メンバ変数をすべてコピーしたものが新しく生成される。<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  #include <iostream>
  #include <iostream>
  #include <string>
  #include <string>
59行目: 59行目:
clsMyClass2を通してm_piNumberの値を変更すると、無関係のclsMyClass1にも影響が出てしまう。<br>
clsMyClass2を通してm_piNumberの値を変更すると、無関係のclsMyClass1にも影響が出てしまう。<br>
このような場合には、デフォルトコピーコンストラクタを使用してはいけない。<br>
このような場合には、デフォルトコピーコンストラクタを使用してはいけない。<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  #include <iostream>
  #include <iostream>
   
   
101行目: 101行目:
コピーコンストラクタで、コピーしたいメンバ変数を任意に選択することができる。<br>
コピーコンストラクタで、コピーしたいメンバ変数を任意に選択することができる。<br>
ただし、このままだとメンバ変数が勝手にコピーされないだけで、デフォルトコピーコンストラクタを呼び出すことができる。<br>
ただし、このままだとメンバ変数が勝手にコピーされないだけで、デフォルトコピーコンストラクタを呼び出すことができる。<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  class CMyClass
  class CMyClass
  {
  {
140行目: 140行目:
<br>
<br>
なお、この方法で禁止できるのはコピーコンストラクタの使用であり、代入操作は禁止されない。<br>
なお、この方法で禁止できるのはコピーコンストラクタの使用であり、代入操作は禁止されない。<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  class CMyClass
  class CMyClass
  {
  {
176行目: 176行目:
変換コンストラクタは、与えられた値の暗黙的な変換が可能な場合、値からインスタンスを生成する。<br>
変換コンストラクタは、与えられた値の暗黙的な変換が可能な場合、値からインスタンスを生成する。<br>
変換ができない場合は、インスタンスを生成することは出来ない。<br>
変換ができない場合は、インスタンスを生成することは出来ない。<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  class CMyClass
  class CMyClass
  {
  {
225行目: 225行目:
これは、引数に指定した整数が関数funcに渡された時点で、CMyClassの変換コンストラクタが動作して、<br>
これは、引数に指定した整数が関数funcに渡された時点で、CMyClassの変換コンストラクタが動作して、<br>
CMyClassのインスタンスが生成されるためである。<br>
CMyClassのインスタンスが生成されるためである。<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  class CMyClass
  class CMyClass
  {
  {
252行目: 252行目:
コンストラクタの前にexplicitキーワードを付けると、暗黙的な呼び出しを禁止することが出来る。<br>
コンストラクタの前にexplicitキーワードを付けると、暗黙的な呼び出しを禁止することが出来る。<br>
変換コンストラクタは意図しない動作となることが多いので、基本的に禁止しておいた方がよい。<br>
変換コンストラクタは意図しない動作となることが多いので、基本的に禁止しておいた方がよい。<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  class CMyClass
  class CMyClass
  {
  {

案内メニュー