【发布时间】:2018-03-20 23:36:38
【问题描述】:
我有两门课
class A {
public:
virtual void doStuff() = 0;
};
class B : public A {
int x;
public:
virtual void doStuff() override { x = x*2;} //just example function
};
还有另一个修改和使用前一个数据的类
class Foo {
A a;
public:
Foo::Foo(A &a_) : a(a_) {}
};
现在我创建对象,并传递给 Foo 类
B b;
// edit b attributes,
Foo foo(b);
所以在类构造函数的参数列表中我知道不存在对象切片的问题,因为是引用,但是在分配变量a(a_)的那一刻是什么情况?
由于我不知道对象b 将存在多久,我需要制作一个安全副本。我有很多来自 A 的不同派生类,甚至是派生自派生的。
会有对象切片吗?,
是否有解决方案,或者我需要传递指针(不想要这种方法)?
【问题讨论】:
标签: c++ inheritance initialization polymorphism object-slicing