将派生类的成员分配给派生类的另一个成员

0 c++

我有一个关于将派生类的一个成员分配给同一派生类的另一个成员的问题,有人可以帮我理解为什么这段代码打印 14 而不是 34 吗?我不明白 b2.nb 何时获取 b1.nb 的值,因为在这段代码中:

   A& operator=(const A& a){
        na = a.na*2;
        return *this;
    }
Run Code Online (Sandbox Code Playgroud)

没有将 b1.nb 分配给 b2.nb

class A{
public:
    A(int i){na = i;}
    A& operator=(const A& a){
        na = a.na*2;
        return *this;
    }
    int na;
};

class B : public A{
public:
    B(int i, int j): A(j){nb = i;}
    int nb;
};

int main()
{
   B b1(1,2);
   B b2(3,4);
   b2 = b1;
   cout<<b2.nb<<b2.na;
}
Run Code Online (Sandbox Code Playgroud)

Sil*_*olo 5

来自cpreference

隐式声明的复制赋值运算符

如果没有为类类型提供用户定义的复制赋值运算符(structclassunion),则编译器将始终将其声明为该类的内联公共成员。

您的B类从不声明复制赋值运算符(即具有与 兼容的签名的运算符B& operator=(const B&))。事实是否A如此,在这里无关紧要。B没有声明一,因此 C++ 生成一。在您的情况下,生成的复制赋值运算符调用父类的赋值运算符,然后分配B直接声明的任何变量nb