変換コンストラクター (C++ のみ)
変換コンストラクター は、関数指定子 explicit を指定せずに宣言される単一パラメーター・コンストラクターです。コンパイラーは、変換コンストラクターを使用して、オブジェクトを第 1 パラメーターの型から、
変換コンストラクターのクラスの型に変換します。
次の例は、このことを示しています。
class Y {
int a, b;
char* name;
public:
Y(int i) { };
Y(const char* n, int j = 0) { };
};
void add(Y) { };
int main() {
// equivalent to
// obj1 = Y(2)
Y obj1 = 2;
// equivalent to
// obj2 = Y("somestring",0)
Y obj2 = "somestring";
// equivalent to
// obj1 = Y(10)
obj1 = 10;
// equivalent to
// add(Y(5))
add(5);
}
上記の例には、次の 2 つの変換コンストラクターがあります。- Y(int i) は、整数をクラス Y のオブジェクトに変換するために使用。
- Y(const char* n, int j = 0) は、ストリングを指すポインターを、 クラス Y のオブジェクトに変換するために使用。
コンパイラーは、上記で説明したような型を、explicit
キーワードを使用して宣言されたコンストラクターで暗黙的に変換しません。
コンパイラーは、new 式、static_cast 式と明示キャスト、
および基底とメンバーの初期化で明示的に宣言されたコンストラクターだけを使用します。
次の例は、このことを示しています。
class A {
public:
explicit A() { };
explicit A(int) { };
};
int main() {
A z;
// A y = 1;
A x = A(1);
A w(1);
A* v = new A(1);
A u = (A)1;
A t = static_cast<A>(1);
}
コンパイラーは、これが暗黙の型変換なので、 ステートメント A y = 1 を許可しません。 クラス A は、型変換コンストラクターを持っていません。
コピー・コンストラクターは、変換コンストラクターです。