继承复制基础 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) {}
首先,我不知道什么问题最适合探索它。如果问题不好或不相关,您可以更改问题。但请尝试理解我的问题。
这是我们的测验。
测试题:需要在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) {}