最近在工作中我碰到这个代码来(这是一个人为的例子,但是从根本上做同样的事情):如何根据基类对象中的变量值在派生类中分配变量?
class A
{
public:
int foo;
};
class B: public A
{
public:
int bar;
};
int main()
{
A a;
a.foo = 1000;
B b;
A* a_ptr = &b;
*a_ptr = a;
}
以上,正在发生的事情是,在a
所有成员变量被复制到b
中的对应成员变量,因为B
从A
派生,并且所有类型为B
的对象都保证至少具有与A
类型的对象相同的所有成员变量。
在实际的代码中,A
有足够的变量,手动分配每个变量都不理想。
经过一段时间的努力之后,我能够理解代码在做什么,但实际上花了我几秒钟的时间似乎就像一面红旗。
有没有另外一种方法来做这个代码可能更容易理解,或更符合C++常见做法?以这种方式查看变量是否很常见?
编辑:有人建议我的问题是可能的重复,并且我问什么对象切片是。这不是对象切片,因为我没有将派生类型的对象分配给基类型的对象。因此,代码中的任何地方都没有“切片”或丢失任何信息。
为什么不重载赋值运算符? – NathanOliver
@Nathan超载要做什么? –
我编辑了我的问题,以澄清这不是对象切片。这与对象切片相反。请仔细阅读代码。 – medman826