Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何访问子类';当基类和子类都具有相同的对象名但类型不同时,则为s datamember。在C++;_C++_Visual C++_Inheritance_Parent Child - Fatal编程技术网

C++ 如何访问子类';当基类和子类都具有相同的对象名但类型不同时,则为s datamember。在C++;

C++ 如何访问子类';当基类和子类都具有相同的对象名但类型不同时,则为s datamember。在C++;,c++,visual-c++,inheritance,parent-child,C++,Visual C++,Inheritance,Parent Child,我wnat从base访问子对象的obj.y1,并将其分配给base的obj.x1 但要记住的一点是,base和child中的对象名是相同的 “obj” 谁能帮我一下吗。谢谢。你的问题有些含糊,但据我所知,你想要这样的东西: struct BaseType { int x1; float x2; }; struct ChildType { int y1; float y2; }; Class Base { Base

我wnat从base访问子对象的obj.y1,并将其分配给base的obj.x1

但要记住的一点是,base和child中的对象名是相同的 “obj”


谁能帮我一下吗。谢谢。

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

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;  

};   
我认为您有一个Child类型的对象,它没有实现funcBase(),您希望对该对象调用funcBase(),并让funcBase()访问Child::obj而不是Base::obj。如果是这样的话,我相信你可以把孩子定义为

ChildType* child = dynamic_cast<ChildType*>( &obj );
obj.x1 = child->y1;
obj.x2 = child->y2;
通常用于解决问题,但我认为您也可以使用它来解决此问题


如果我的假设不正确,请不要理我。

Sean的回答似乎与您的问题很匹配(假设他对您的问题的解释是正确的),但您的问题并不清楚。为什么要尝试从基对象的成员函数访问子对象的数据成员?对您的总体目标的描述(或演示它的代码示例)会很有帮助。您的最终目标是什么?正如Alex Z所说,这是可能的,但我并不特别推荐。基类不必知道它的子类。这种继承的方式。如果obj实际上是一个基类型,而您试图将其视为子类型,会发生什么?糟糕的,糟糕的事情。事实上,一个不同的设计可能是解决问题的方法。很抱歉,我之前对这个问题的解释对很多人来说似乎是模糊和混乱的。因此,我在代码中添加了必要的附加内容。请你参考一下。封装!对象将数据和行为结合起来,隐藏数据。如果您发现自己在处理其他类的数据时很烦琐,甚至使用
get
s和
set
s,那么您就失败了。最好考虑一下
Base
具有什么行为,以及希望
Dervived
类引入什么新行为。然后设计
Base
类,将行为变量委托给
Derived
。您可以使用
virtual
函数来完成此操作。我已经用另一个为您最近的编辑而定制的示例编辑了我的回复。
ChildType* child = dynamic_cast<ChildType*>( &obj );
obj.x1 = child->y1;
obj.x2 = child->y2;
class Child : virtual public Base
{
    ChildType obj;
    ...
}