繁体   English   中英

当基类和子类具有相同的对象名称但类型不同时,如何访问子类的数据成员。 在C ++中

[英]How to access child class's datamember when both base and child class have same object name but different types. in C++

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”的1件事。

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

您的问题有些含糊,但是从我的搜集中可以得出以下信息:

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

现在child指向obj ,就好像它是ChildType类型ChildType ,假设ChildType成功。

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

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

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

ChildType* child = dynamic_cast<ChildType*>( &obj );
obj.x1 = child->y1;
obj.x2 = child->y2;

认为您有一个类型为Child的对象,该对象未实现funcBase(),并且您想在此对象上调用funcBase(),并希望funcBase()访问Child :: obj而不是Base :: obj。 如果是这样,我相信您可以将Child定义为

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM