返回复合模式的复合对象不返回整个对象
Returning Composite object of composite pattern doesn't return the whole object
我创建了一个包含组件、叶类和复合类的复合模式,其中只有复合类同时具有成员变量向量和 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((中。您正在创建指向nullptr
的A*
类型的空对象。然后你绑定调用myA
的成员函数,在这种情况下它什么都不指向,尝试正确初始化它,然后通过myA
调用你的成员函数。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 如何返回一个类的两个对象相加的结果
- 返回复合模式的复合对象不返回整个对象
- C++析构函数调用两次,堆栈分配的复合对象
- 复合属性对象,当所有子对象都更改时,它禁止多个信号发射
- C++用户定义的从复合对象到浮点对象的转换
- C++中的复合(对象复合)的目的是什么
- 在构建复合对象时消除不必要的副本