返回复合模式的复合对象不返回整个对象

Returning Composite object of composite pattern doesn't return the whole object

本文关键字:对象 复合 返回 模式      更新时间:2023-10-16

我创建了一个包含组件、叶类和复合类的复合模式,其中只有复合类同时具有成员变量向量和 add 方法:

void add(Component *a);
vector < Component * > children;

在单独的类 B 中,我创建了一个方法 getComponent(( 来返回一个复合成员变量

Class B: public A
{
Composite m_Comp;
public:
Composite * getComponent() 
{
Leaf myLeaf1;
Leaf myLeaf2;
Composite myComp1;
myComp1.add(&Leaf1)
myComp1.add(&Leaf2)
Leaf myLeaf3;
m_Comp.add(&myComp1);
m_Comp.add(&myLeaf3);
m_Comp.inspect()   
return &m_Comp;
}
};

当我检查mypCompCheck时,它看起来是正确的,但是当我从main检索它(?

A* myA;
AuxClass myAuxObject;
myA=myAuxObject.returnReferenceToClassBObject();
Composite * mypComp=myA->getComponent(); 
mypComp->inspect()   

mypComp 不是同一个对象。我认为退回它的方式有错吗?

这是我的替代方法,阅读后返回成员变量的引用是不好的做法吗?,但仍然不起作用......

Class B: public A
{
public:        
Composite m_Comp;
setComponent() 
{
Leaf myLeaf1;
Leaf myLeaf2;
Composite myComp1;
myComp1.add(&Leaf1)
myComp1.add(&Leaf2)
Leaf myLeaf3;
m_Comp.add(&myComp1);
m_Comp.add(&myLeaf3);
m_Comp.inspect();
}
};

和在主要

A* myA;
AuxClass myAuxObject;
myA=myAuxObject.returnReferenceToClassBObject();
myA=myAuxObject.m_Comp.inspect();

当我在 get 方法中检查对象时,它会正确显示其所有组件,包括嵌套组件。当我在main中执行此操作时,我将m_Comp中的myComp1视为组件而不是复合组件。

正因为如此,并且因为与 std 对象(而不是复合对象(的类似设计有效,我想知道我如何使用复合是否有问题,而不是我如何返回成员变量...... 我的意思是,我通过引用通过 add 方法添加这些组件,然后它们的范围受到限制?

因此,我用成员变量替换了所有局部变量,它有效......

Class A
{
Leaf m_Leaf1;
Leaf m_Leaf2;
Composite myComp1;
Leaf myLeaf3;
public:
Composite m_Comp;
setComponent();
{
m_Comp1.add(&m_Leaf1)
m_Comp1.add(&m_Leaf2)
m_Comp.add(&m_Comp1);
m_Comp.add(&m_Leaf3);
m_Comp.inspect();
}
};

和在主要

A myA;
myA.m_Comp.inspect();

由于您的提示和相关搜索,我得到了一些富有成效的学习。

您的问题出现在main((中。您正在创建指向nullptrA*类型的空对象。然后你绑定调用myA的成员函数,在这种情况下它什么都不指向,尝试正确初始化它,然后通过myA调用你的成员函数。