继承复制基础 class 构造函数到派生 class 对象

Inheritance Copying Base class Constructor to Derived class Object

首先,我不知道什么问题最适合探索它。如果问题不好或不相关,您可以更改问题。但请尝试理解我的问题。

这是我们的测验。

测试题:需要在classB中修改什么才能生成。

num=5
gum=10

原码:

#include <iostream>
class A{
    private:
        int num;
    public:
        A(int x=0):num(x){
        }
        A(const A& a):num(a.num){
        }
        void Display(){
            std::cout << "num=" << num << std::endl;
        }
        void SetNum(int x){
            num=x;
        }
};
class B: public A{
    private:
        int gum;
    public:
        B(int x=0, int y=0):A(x), gum(y){
        }
        B(const B& b){
            gum=b.gum;
        }
        void Display(){
            A::Display();
            std::cout << "gum=" << gum;
        }
};
int main(){
    B b1(5,10);
    B b2(b1);
    b2.Display();
    return 0;
}

我只是将 A::SetNum(5); 这段代码放在 B 的 class 复制构造函数中。 结果是

num=5
gum=10

但是当我删除 A::SetNum(5); 和 运行 原始代码时,它会生成。

num=0
gum=10

现在我想问为什么B的拷贝构造函数在原代码中没有自动拷贝A(x)域到b2对象?

A的构造函数A(x);不是Derivedclass的字段?如果是它应该复制到 b2 对象。

Now I want to ask Why B's copy constructor didn't copy automatically A(x) field to b2 object in original code?

因为你明确地写了一个复制构造函数,它不在基中进行任何复制class:

B(const B& b){
    gum=b.gum;
}

这里,基础 class 子对象被默认构建。

最简单的解决方案是删除复制构造函数。编译器合成的将做正确的事情。否则,修复你的复制构造函数:

B(const B& b): A(b), gum(b.gum) {}