我可能遗漏了一些非常简单的东西,但如果有人能指出我正确的方向,我将不胜感激。
我有 2 个类:A 和 B。A 有一组数据结构和修改它们的函数(举个假设的例子,比如向数据结构添加、删除、插入等)。B 具有一组函数,这些函数指定如何在 A 中修改数据结构。
为了可扩展性,B被继承以反映A的数据结构上不同的可能行为。B 的一种实现可以选择添加到 A 的数据结构的开头,从结尾删除,等等。另一种实现可能会添加到末尾,从开头删除,等等。
我在创建A的过程中传递了一个基类B的对象,这样A的泛型addNode()、deleteNode()等函数实际上可以查找到创建过程中传递给它的特定类型的B对象,并参考它在 B 中的实施,以了解要遵循的操作。
在下面的这个假设示例中,所关注的数据结构是一个双向链表。在我的问题中,数据结构本身不是问题。我担心如何在 B 的派生类中调用正确的方法来修改我在 A 中的数据结构。
A类:
class A
{
static A create(B bObj); // returns an A object after calling the constructor
void addNode(int);
void deleteNode();
...
private:
struct myNode
{
int value;
myNode *next;
myNode *prev;
}
myNode *head;
myNode *tail;
}
B类:
class B
{
virtual void addNode(int);
virtual void deleteNode();
...
}
ChildB1 类:
class ChildB1
{
void addNode(int)
{
// code for add to the front
}
void deleteNode()
{
// code for delete from the back
}
}
ChildB2 类:
class ChildB2
{
void addNode(int)
{
// code for add to the back
}
void deleteNode()
{
// code for delete from the front
}
}
我遇到的问题是如何让 B 的子类访问正在运行的 AI 的当前对象?假设,在使用 create() 方法创建 A (aObj) 的对象时,我传递了对对象 ChildB2 的引用。
B *bObj = new ChildB2();
A aObj = A.create(*bObj);
现在我在调用aObj.add()的时候,希望它调用ChildB2类的add()方法,这样它就可以对A中的链表进行操作,并将其添加到链表的后端。但是 ChildB2 类的 add() 函数是如何访问 aObj 的链表的呢?
如果这个问题冗长而幼稚,我深表歉意。如果需要,我很乐意提供进一步的说明。