C++ 将基类构造函数复制到派生类对象的继承

C++ 将基类构造函数复制到派生类对象的继承,c++,copy-constructor,C++,Copy Constructor,首先,我不知道哪一个问题是最好的探索。若问题不好或不相关,你们可以改变它。但是请试着理解我的问题 这是我们的测验 问答题:B类中需要修改哪些内容才能生成 num=5 gum=10 num=0 gum=10 原始代码: #include <iostream> class A{ private: int num; public: A(int x=0):num(x){ } A(const A& a)

首先,我不知道哪一个问题是最好的探索。若问题不好或不相关,你们可以改变它。但是请试着理解我的问题

这是我们的测验

问答题:B类中需要修改哪些内容才能生成

num=5
gum=10
num=0
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)
并运行原始代码,然后生成

num=5
gum=10
num=0
gum=10
现在我想问为什么B的复制构造函数没有在原始代码中将(x)字段自动复制到b2对象

A的构造函数
A(x)不是派生类的字段吗?如果是,则应复制到b2对象

现在我想问为什么B的复制构造函数没有在原始代码中将(x)字段自动复制到b2对象

因为您显式编写的复制构造函数不在基类中进行任何复制:

B(const B& b){
    gum=b.gum;
}
在这里,基类子对象得到默认构造

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

B(const B& b): A(b), gum(b.gum) {}
现在我想问为什么B的复制构造函数没有在原始代码中将(x)字段自动复制到b2对象

因为您显式编写的复制构造函数不在基类中进行任何复制:

B(const B& b){
    gum=b.gum;
}
在这里,基类子对象得到默认构造

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

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

天哪理解。此代码显式复制构造函数,因此我们需要复制所有字段..--愚蠢的头脑。。谢谢你,伙计。。!!天哪理解。此代码显式复制构造函数,因此我们需要复制所有字段..--愚蠢的头脑。。谢谢你,伙计。。!!以上评论已经理解了,谢谢。被遗忘了一阵子。。!以上评论已经理解了,谢谢。被遗忘了一阵子。。!