gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:28:51 25 4
gpt4 key购买 nike

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

这是我们的测验。

测验问题:类B中需要修改什么才能生成。

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 的类复制构造函数中。结果是

num=5
gum=10

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

num=0
gum=10

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

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

最佳答案

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

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

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

这里,基类子对象默认构造。

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

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

关于c++ - 继承将基类构造函数复制到派生类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32294849/

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