- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
所以,我有一个基类和两个派生类,我们称它们为 Deriv1 和 Deriv2。
假设基类有很多( protected 或公共(public)的)变量,这些变量当然也包含在 Deriv1 和 Deriv2 中。
现在假设我有一个 Deriv1 实例。来自 Base 类的数十亿个变量充满了独立的值。现在我想使用这些共享值创建一个 Deriv2 实例。
现在我的问题是:如何将 Deriv1 的基类部分复制到 Deriv2 而无需编写赋值运算符,我必须手动列出所有数十亿个基类变量(并更新每次我更改 Base 类中的某些内容时它)?有没有办法做到这一点,无论是否肮脏?
我最初的想法是:
Deriv1 drv1;
... // actions regarding drv1, like changing variables
Base tempbase = drv1; // slicing off the non-base parts of Deriv1
Deriv2 drv2 = *dynamic_cast<Deriv2*>(&tempbase); // downcast
这没有用。它确实编译了(我不得不为它向 Base 添加一个虚拟虚拟函数),但在运行时,它说“访问冲突”,所以我猜 dynamic_cast 返回了一个空指针。我尝试在 dynamic_cast 中使用引用而不是指针,这也没有用。
最佳答案
您可以使用基类的(隐式定义的)复制构造函数,它按值(即浅拷贝)复制所有成员(甚至私有(private)成员)。您也可以为基类定义一个显式复制构造函数,但在您的情况下似乎没有必要。请参阅以下示例:
class A {
public:
A (int x, int y) : x(x), y(y) { };
// implicitly defined: A (const A &anA) : x(anA.x), y(anA.y) { }
private:
int x, y;
};
class B : public A {
public:
int z;
B(const A&anA) : A(anA) { }
B(const B&b, int z) : A(b), z(z) { }
};
class C : public A {
public:
int anythingElse;
C(const A&anA) : A(anA) { }
};
int main()
{
A a(10,20); // a.x = 10; a.y = 20
B b1(a); // b1.x = 10, b1.y = 20, b1.z = undefined.
B b2(b1,30); // b2.x = 10, b2.y = 20, b2.z = 30.
C c(b1); // c.x = 10; c.y = 20; c.anythingElse = undefined
return 0;
}
关于c++ - 在派生类之间复制共享变量(浅拷贝就够了),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42718138/
免责声明 这篇文章是关于术语“浅拷贝”和“深拷贝”的正确用法,特别是在谈论复制一个不包含任何引用的对象时。这个问题并不意味着(也不应该)基于意见,除非真的没有关于这个话题的共识。我已将此问题标记为 C
我有这个功能 int getrelation(string name, RELATION& output){ bool found=0; int index=0;
与 why should I make a copy of a data frame in pandas 有关 我注意到在流行的backtesting图书馆, def __init__(self, d
我的问题很基础,但我想 100% 理解所有内容。 SO中的很多问题都引用了我的帖子,但我没有找到满意的答案。 我们知道java中的枚举是引用类型。让我们考虑以下片段: public static cl
请引用这个 fiddle 的问题。 http://jsfiddle.net/AQR55/ 1)为什么附加到隔离范围属性的 watch - 双向绑定(bind)到父属性,不会在更改父范围属性时触发。 在
我想使用 UP3 来完成一项非常具体的任务,我应该能够使用 API 来实现该任务。我想了解是否可以编写以下应用程序。 基于https://jawbone.com/support/articles/00
如何在辅助方法中传递上下文并提取数据? 请参阅以下代码片段: import AppContext from '../../context/AppContext' import extractDatta
我正在尝试使用 simple-git 创建浅克隆。我正在尝试创建与此命令等效的命令:git clone --depth 1 https://github.com/steveukx/git-js.git
我是一名优秀的程序员,十分优秀!