C++ 将基类构造函数复制到派生类对象的继承
首先,我不知道哪一个问题是最好的探索。若问题不好或不相关,你们可以改变它。但是请试着理解我的问题 这是我们的测验 问答题:B类中需要修改哪些内容才能生成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)
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) {}
天哪理解。此代码显式复制构造函数,因此我们需要复制所有字段..--愚蠢的头脑。。谢谢你,伙计。。!!天哪理解。此代码显式复制构造函数,因此我们需要复制所有字段..--愚蠢的头脑。。谢谢你,伙计。。!!以上评论已经理解了,谢谢。被遗忘了一阵子。。!以上评论已经理解了,谢谢。被遗忘了一阵子。。!