C++ 如何访问子类';当基类和子类都具有相同的对象名但类型不同时,则为s datamember。在C++;
我wnat从base访问子对象的obj.y1,并将其分配给base的obj.x1 但要记住的一点是,base和child中的对象名是相同的 “obj”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
谁能帮我一下吗。谢谢。你的问题有些含糊,但据我所知,你想要这样的东西:
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;
...
}