1
2
3
4
5
6
7
8
9
10
11
12
13
void DisplayObjectContainer::addChild(weak_ptr<DisplayObject> child, int XinParent, int YinParent)
{
    auto pChild = child.lock();
    if(pChild) {
        pChild->Parent(this);    //접근못합니다 메렁
        displayList.push_back(child);
        pChild->XY(XinParent, YinParent);
    } 
    else {
        DisplayObjectContainerError err(-1);
        throw err;
    }    
}
cs

DisplayObjectContainer는 DisplayObject를 상속합니다.

DisplayObjectContainer와 DisplayObject는 트리구조를 이룰 수 있는데  

DisplayObject는 잎노드라고 볼 수 있습니다.


둘 다

private: 

    DisplayObject* parent

멤버에 자신의 부모에 대한 포인터를 저장합니다.

(그러니까 DiplayObject에 parent가 private으로 선언되어 있음)


그리고 DisplayObject는 parent의 setter인 

protected:

    void Parent(DisplayObject* obj){ parent = obj; }

를 가집니다. 


DisplayObjectContainer에서 자식을 넣을 때 addChild를 쓰는데

이 함수에서 자식(DisplayObject)의 parent를 설정해줘야됩니다.


Parent(DisplayObject* obj);를 public으로 설정하면 위 함수는 잘 작동합니다....

근데 그러면 어중이떠중이가 접근해서는

DisplayObject의 애미애비를 바꿔버릴수도 있잖아여?

ㅜㅠ