为什么要在 Derived Class 中使用默认构造函数,我们需要在 Base Class 中使用默认构造函数

Why in order to use default constructor in Derived Class, we need a default constructor in the Base Class

正如你在标题中看到的,我需要在下面的代码中找到错误, 这是我所知道的:

我不知道的是:

代码如下:

#include <iostream>

using namespace std;

class A 
{    
    protected:
        int i;
    public:
        A(int i) :i (i) {}
};

struct B : A
{
    B() {}
    void set(int i) { this-> i = i; }
    void print() { cout << i << endl; }
};

int main()
{
    B b; b.set(2);
    b.print();
}

我认为你的标题具有误导性,但这个问题是有效的。

为了构建B,A也需要构建(你知道的) 但是如何在 A 的构造函数中不知道 int i 的值的情况下构造它?

但是您可以使用 B 的 parameter-less 构造函数为 i:

提供值
struct B : public A {
  public:
    B(): A(53 /* value for int i */) { }
...

但除非您指定 B 应该使用 A 的构造函数,否则编译器将搜索默认构造函数(在 A 的情况下不存在)

魔术酱是在进入构造函数的主体之前all member variables and base classes must have been fully constructed

表示必须构造A,必须调用A(int i),而this-> i = i;是赋值,不是初始化,不能代替[=13=的初始化] 由 A 的构造函数执行。