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