gpt4 book ai didi

c++ Derived Default复制构造函数用什么初始化Base复制构造函数?

转载 作者:行者123 更新时间:2023-11-27 23:20:58 25 4
gpt4 key购买 nike

代码:

#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 复制构造函数来初始化 Base 对象.我的问题是 B 的复制构造函数将采用什么参数?它是一个 D 对象,然后它会被转换为一个 B 对象吗?

2)在D的拷贝构造函数中,我用D对象n初始化了B,没有调用 operator B() 证明 D 类型的对象 n 没有被转换为 B,所以它可以作为参数传递给 B 复制构造函数。对这种行为有什么解释吗?

最佳答案

首先,cast 是您在代码中编写的内容,用于告诉编译器进行转换。有两类转换:隐式和显式。隐式转换将在需要时完成,无需强制转换。显式转换需要强制转换。您在这里所说的是隐式转换,而不是强制转换。

答案是存在从对派生类型的引用到对基类型的引用的隐式转换。就这么简单:n 是一个 D&,它可以简单地通过隐式转换它的类型传递给一个接受 B& 的函数。

关于c++ Derived Default复制构造函数用什么初始化Base复制构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13093291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com