gpt4 book ai didi

c++ - 继承,为什么要为基类调用两个构造函数,C++

转载 作者:行者123 更新时间:2023-11-28 00:08:43 26 4
gpt4 key购买 nike

我想在我的书中做一个作业,但我不明白输出结果。当程序中的主要代码运行时输出为:

B::B(3)

B::B()//为什么会这样输出

B::B(-3)

D::D(3)

它通过调用 B::B(int n) {} 得到这个先然后B::B() {}接下来是我得到的接下来的两行。所以调用第一个的程序因为它被声明为函数中类 A 的构造函数并且它必须分配值,我没有得到的是输出行 2,为什么是 B::B() {}甚至叫?它作为构造函数被调用,但不应该只调用带参数的构造函数吗?

class B {
public:
B(); //why is this called?
B(int n);
};

// Definitions of B
B::B() {
cout << "B::B()\n";
}
B::B(int n) {
cout << "B::B(" << n << ")\n";
}

class D : public B {
public:
D();
D(int n);
private:
B b;
};

// Definitions of D
D::D() {
cout << "D::D()\n";
}
D::D(int n) : B(n) {
b = B(-n);
cout << "D::D("<< n <<")\n";
}

int main(int argc, const char * argv[]) {
// insert code here...

D d(3);
return 0;
}

最佳答案

首先调用基类构造函数:B::B(3)
然后调用 b 字段的构造函数:B::B()
然后执行派生的构造函数主体(所有字段构造完成后)。
D 的构造函数首先在行 b = B(-n); 上构造另一个 B(所以 B::B( -3) 被打印),然后打印 D::D(3)

关于c++ - 继承,为什么要为基类调用两个构造函数,C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34124012/

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