gpt4 book ai didi

c++ - 为什么 C++ 复制构造函数在调用其子复制构造函数时表现不同?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:14:41 25 4
gpt4 key购买 nike

我有以下玩具类 A 及其子类 B:

#include <iostream>

using namespace std;

class A
{
protected:
int a;
public:
A():a(1){cout<<"A default constructor..."<<endl;}
A(int i):a(i){cout<<"A non-default constructor..."<<endl;}
A(const A &ao){cout<<"A copy constructor..."<<endl; a=ao.a;}
};

class B:public A
{
private:
int b;
public:
B(int i,int j):A(i),b(j){cout<<"B constructor..."<<endl;}
//B(const B &bo){cout<<"B copy constructor... "<<endl; b=bo.b;}
void print(){cout<<endl<<"class B, a: "<<a<<" b: "<<b<<endl<<endl;}
};

int main()
{
B b1(3,8);
b1.print();
B b2=b1;
b2.print();
}

我发现如果我不为B类提供拷贝构造函数,编译器会为我合成一个,而那个使用我为A类提供的拷贝构造函数。但是,如果我为类A提供拷贝构造函数B类,我没有显式调用基类A的复制构造函数(见代码),编译器会调用类A的默认构造函数吗?这是为什么?

最佳答案

这是标准行为。这主要是为了保持一致性:任何未显式调用特定基类构造函数的用户定义构造函数将调用默认构造函数。为什么复制构造函数会有所不同?

关于c++ - 为什么 C++ 复制构造函数在调用其子复制构造函数时表现不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18687649/

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