-1
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;  

};   

我想从基地访问孩子的 obj.y1 并将其分配给基地的 obj.x1。

但是要记住基础和子对象中的对象名称是相同的“obj”的一件事。

任何人都可以在这方面帮助我。谢谢。

4

2 回答 2

2

你的问题有点含糊,但据我所知,你想要这样的东西:

ChildType* child = dynamic_cast<ChildType*>( &obj );

现在child指向obj,就好像它是 type 一样ChildType,假设转换成功。

在此处阅读有关类型转换的更多信息

编辑:我应该提一下,如果更好的设计可以替代它,应该避免这样的类型转换。也许你应该在这里重新考虑一下你的整体设计。

EDIT2:鉴于您最近的编辑,这里有一个更具体的示例代码块:

ChildType* child = dynamic_cast<ChildType*>( &obj );
obj.x1 = child->y1;
obj.x2 = child->y2;
于 2012-04-13T05:48:29.917 回答
1

认为你有一个 Child 类型的对象,它没有实现 funcBase(),并且你想在这个对象上调用 funcBase() 并让 funcBase() 访问 Child::obj 而不是 Base::obj。如果是这种情况,那么我相信您可以将 Child 定义为

class Child : virtual public Base
{
    ChildType obj;
    ...
}

虚拟继承通常用于解决菱形问题,但我认为您也可以使用它来解决此问题。

如果我的假设不正确,请随意忽略我。

于 2012-04-13T05:49:30.603 回答