c++ - 在派生类之间复制共享变量(浅复制就足够了)

标签 c++ inheritance dynamic-cast downcast

所以,我有一个基类和两个派生类,我们将它们称为 Deriv1 和 Deriv2。

假设基类有很多( protected 或公共(public)的)变量,这些变量当然也包含在 Deriv1 和 Deriv2 中。

现在假设我有一个 Deriv1 实例。基类中的数十亿个变量充满了单独的值。现在我想使用这些共享值创建一个 Deriv2 实例。

现在我的问题是:如何将 Deriv1 的 Base 类部分复制到 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

这不起作用。它确实编译了(我必须为其添加一个虚拟虚拟函数),但在运行时,它说“访问冲突”,所以我猜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++ - 在现有图形应用程序上绘制 DirectX/OpenGL 图形

c++ - 安置新的这个

java - 区分用于货币的 BigDecimal 和用于百分比的 BigDecimal

c++ - 如果调用未覆盖的虚方法,如何强制编译器错误?

c++ - 如何从 std::exception 动态转换为 std::nested_exception?

c++ - 在 C++/Boost ASIO 中内联 ntohs()/ntohl()

c++ - 了解 cin.fail() 和 cin.clear - vector 附加程序

Python 从一个类继承但覆盖调用另一个类的方法?

c++11 - 在非多态类型的情况下,dynamic_cast<void*> 是否保证工作(即等于 static_cast<void*>)?

c++ - 什么可能导致 dynamic_cast 崩溃?