0
代碼:C++是什麼Derived默認拷貝構造函數初始化Base拷貝構造函數用?
#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
拷貝常數ructor,D
的默認拷貝構造函數必須通過調用B
拷貝構造函數來初始化Base對象。我的問題是B
的複製構造函數將採用什麼參數?它是一個D
對象,然後它將被鑄造到一個B
對象?
2)在D
拷貝構造函數,我初始化B
與D
對象n
,也沒有呼叫到operator B()
這證明對象D
類型的n
沒有得到鑄造到B
,所以可以作爲參數傳遞給B
拷貝構造函數。有沒有解釋這種行爲?