C 带有什么默认复制构造函数使用什么初始化基本复制构造函数

c++ what does Derived Default copy constructor initialize Base copy constructor with?

本文关键字:构造函数 什么 复制 初始化 默认      更新时间:2023-10-16

代码:

#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的默认复制构造函数必须通过调用B复制构造器来初始化基本对象。我的问题是B的复制构造函数将采用什么?它是D对象,然后将其施加到B对象?

2)在D的复制构造函数中,我使用D对象n初始化B,并且没有呼叫operator B()的呼叫,证明D类型的对象n没有将其施加到B,因此可以将其作为一个传递,因此可以通过与B复制构造函数一起参数。有任何对此行为的解释吗?

首先,A cast 是您在代码中编写的内容,以告诉编译器进行转换。转换有两类:隐式和明确。在不需要的情况下,将在需要时进行隐式转换。明确的转换需要铸件。您在这里谈论的是隐式转换,而不是演员。

的答案是,从对派生类型的引用到对基本类型的引用中存在隐式转换。这就是简单的:n是一个d&amp;,可以传递给获得b&amp;的函数。仅通过隐式转换其类型。