C++ 在给定场景中访问类的公共方法-C++;
考虑一个场景(C++):C++ 在给定场景中访问类的公共方法-C++;,c++,oop,C++,Oop,考虑一个场景(C++): 类A和类B,都派生自同一父类。对于类A的每个实例,正好有一个类B的实例 类A保留指向类B的指针,以便在类A的构造函数中创建类B的实例 基本上,在实现中,类A提供了一种从文件(XML)访问数据的方法。事实上,类A中的方法依次调用类B的方法来检索或设置XML中的值。例如,类A有一个用于检索标记值的getter函数,在类A级别执行一些操作(主要是验证)后,类A将委托给类B的getter函数 void GetXMLTagValue (const string& sTa
void GetXMLTagValue (const string& sTagName, string& sTagValue)
在某个场景中,我单独得到了一个类B的实例。我需要调用类a的一个公共非静态方法。有没有推荐的方法来实现这一点?最简单的方法就是将指针保持回a。这很容易,因为a构造了B 尽管如此,关于这个特殊场景背后的设计意图,还是值得你质疑的 您似乎实现了,其中A是代理(GUI?),B是真正的主体(持久业务对象?)。公共基类是真实对象及其代理的接口。A将请求转发给B 原则上,代理的目标是提供代理/占位符来控制对真实对象的访问(4组)。您的特殊场景有点不同,因为B将某些内容转发给a: 目的是什么
- 必须将B的某些状态更改通知A吗?在本例中,我建议使用并将A函数作为(虚拟)回调函数调用。这样做的好处是,如果你后来得出另一个物体需要被告知的结论,它将很容易进化
- B是否承担了A没有的责任?B是否应该以更广泛的方式操纵A?然后你可以把B看成是a。它有点像代理。如果你采用decorator方法,你可以在最终客户机和B之间插入其他中间对象,就像在B和A之间一样。但是看到你的一对一关系和A创建B的事实,这将是比添加观察者更彻底的设计变化;我不确定这是否是你在设计中想要的
- 必须将B的某些状态更改通知A吗?在本例中,我建议使用并将A函数作为(虚拟)回调函数调用。这样做的好处是,如果你后来得出另一个物体需要被告知的结论,它将很容易进化
- B是否承担了A没有的责任?B是否应该以更广泛的方式操纵A?然后你可以把B看成是a。它有点像代理。如果你采用decorator方法,你可以在最终客户机和B之间插入其他中间对象,就像在B和A之间一样。但是看到你的一对一关系和A创建B的事实,这将是比添加观察者更彻底的设计变化;我不确定这是否是你在设计中想要的
- 最简单的方法就是把指针放回a。这很容易,因为a构造了B
尽管如此,关于这个特殊场景背后的设计意图,还是值得你质疑的
您似乎实现了,其中A是代理(GUI?),B是真正的主体(持久业务对象?)。公共基类是真实对象及其代理的接口。A将请求转发给B
原则上,代理的目标是提供代理/占位符来控制对真实对象的访问(4组)。您的特殊场景有点不同,因为B将某些内容转发给a:
目的是什么
类a的对象执行此操作。它可以是任何旧对象(需要时创建一个)还是必须是特定对象?@Galik我可以创建一个的对象并调用该方法,但代价很高。(如果没有其他选择,我可能不得不这样做)@object我认为没有其他选择。如果你想调用实例方法,那么你需要一个实例。但是,如果实例方法不引用成员变量,则可以将其设置为静态。如果不实例化类,则无法调用类的公共非静态方法。“我需要调用类a的公共非静态方法。”-您只能使用类a
的对象执行此操作。它可以是任何旧对象(需要时创建一个)还是必须是特定对象?@Galik我可以创建一个的对象并调用该方法,但代价很高。(如果没有其他选择,我可能不得不这样做)@object我认为没有其他选择。如果你想调用实例方法,那么你需要一个实例。但是,如果实例方法不引用成员变量,则可以将其设置为静态。