struct BaseType
{
int x1;
float x2;
};
struct ChildType
{
int y1;
float y2;
};
Class Base
{
BaseType obj;
void funcBase(BaseType **ptr)
{
*ptr = &obj; // When this assignment happens ofcourse obj is of the BaseType as the LHS ptr is pointing to a BaseType
Now I want to write a C++ equivalent code of the following 2 algorithmic statements,
BaseType's obj.x1 = ChildTypes's obj.y1;
BaseType's obj.x2 = ChildTypes's.obj.y1;
}
};
class Child :: public Base
{
ChildType obj;
};
我想从base访问child的obj.y1并将其分配给base的obj.x1。
但要记住基础和孩子中的对象名称是一样的 “物镜”。
任何人都可以帮助我。感谢。
答案 0 :(得分:2)
你的问题有点模糊,但从我可以收集的内容来看,你想要这样的东西:
ChildType* child = dynamic_cast<ChildType*>( &obj );
现在child
指向obj
,就好像它是ChildType
类型一样,假设演员表演成功。
详细了解类型转换here.
编辑:我应该提一下,如果更好的设计可以替代它,那么应该避免像这样的类型转换。也许你应该在这里重新考虑你的整体设计。
EDIT2:鉴于您最近的编辑,这是一个更具体的示例代码块:
ChildType* child = dynamic_cast<ChildType*>( &obj );
obj.x1 = child->y1;
obj.x2 = child->y2;
答案 1 :(得分:1)
我认为你有一个Child类型的对象没有实现funcBase(),你想在这个对象上调用funcBase()并让funcBase()访问Child :: obj而不是基地:: OBJ。如果是这样,那么我相信你可以将Child定义为
class Child : virtual public Base
{
ChildType obj;
...
}
Virtual inheritance通常用于解析diamond problem,但我认为您也可以使用它来解决此问题。
如果我的假设不正确,请随意忽略我。