コード:
#include<iostream>
using namespace std;
class B{
public:
int b;
B(int x):b(x){
cout << "B() Constructor " << endl;}
B(const B& m):b(m.b){
cout << "B(const B&) copy constructor "<< endl;}
};
class D:public B{
public:
D(int x):B(x){
cout << "D() Constructor " << endl;}
D(const D& n):B(n){ // at this point n should be casted to B object !!?
cout << "D(const D&) copy constructor " << endl;}
operator B(){
cout << "operator B" << endl;
return B(this->b);}
};
int main(){
D ob(1);
cout << "---" << endl;
D oc=ob;
}
出力:
B() Constructor
D() Constructor
---
B(const B&) copy constructor
D(const D&) copy constructor
質問:
1) コピー コンストラクターを指定しなかった場合D
、の既定のコピー コンストラクターは、コピー コンストラクターをD
呼び出して Base オブジェクトを初期化する必要がありますB
。B
私の質問は、コピー コンストラクターが取る引数は何ですか? それはオブジェクトですか?オブジェクトD
にキャストされB
ますか?
2) のコピー コンストラクターで、 objectでD
初期化B
しましたが、 type のオブジェクトがにキャストされないことを示すwhichの呼び出しがなかったため、コピー コンストラクターに引数として渡すことができます。この動作の説明はありますか?D
n
operator B()
n
D
B
B