代码:
#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
初始化,并且没有调用which 证明类型的对象没有被强制转换为,因此它可以作为参数传递给复制构造函数。这种行为有什么解释吗?B
D
n
operator B()
n
D
B
B