2013-10-12 2 views
0

나는이 클래스를 가지고있다. (나는 끔찍한 생각이다. 나는 C++ 클래스와 포인터를 사용하기 시작했다. :) :)트리의 머리에 포인터

Tree temp(5); 
Tree* tem = &temp; 
temp.SetInfo(10); 
temp.SetLeft(5); 
temp = temp.GetLeft(); 
cout << tem->GetInfo(); 
:
class Tree{ 
private: 
    Tree* Left; 
    Tree* Right; 
    int info; 
    Tree* GetTree(int num){ 
     return new Tree(num); 
    } 
public: 
    Tree() :info(0) ,Left(nullptr), Right(nullptr) {}; 
    Tree(int num) : info(num), Left(nullptr) , Right(nullptr){}; 
    Tree(int num,Tree* L,Tree* R) : info(num), Left(L), Right(R) {}; 
    void SetLeft(Tree* L){Left = L;}; 
    void SetRight(Tree* R){Right = R;}; 
    void SetLeft(Tree L){Left = &L;}; 
    void SetRight(Tree R){Right = &R;}; 
    void SetLeft(int num){Left = GetTree(num);}; 
    void SetRight(int num){Right = GetTree(num);}; 
    void SetInfo(int num){info = num;}; 
    Tree GetLeft(){return (Left==nullptr) ? Tree() : *Left;}; 
    Tree GetRight(){return (Right==nullptr) ? Tree() : *Right;}; 
    Tree* GetLeft(bool ptr){return Left;}; 
    Tree* GetRight(bool ptr){return Right;}; 
    int GetInfo(){return info;}; 
}; 

(기본적으로이 클래스는 2 잎 (2 더 많은 나무), 왼쪽과 오른쪽이 나무를 만들고, 그들 각각의 등등보다 2 개 잎이 ..) 그래서 내가 이런 짓을

이 트리의 헤드를 가리 키지 만, 임시 직원 .. 이 작업을 쉽게 수행 할 수 있습니까?

내가 수업을 도와 줄 수 있습니까? 포인터와 클래스를 결합하는 데 어려움이 있습니다. S :

감사합니다!

+0

알아보기 temp로 변경하면 temp를 변경하면 tem도 새로운 값을 가리 킵니다. – MRB

+0

그래서 temp가 temp의 트리의 헤드를 가리 키도록해야합니까? –

답변

1

때문에 여기에, 편 트리의 머리를 가리 킵니다 것으로 기대하지만, 그냥 물론

, 그것은이 temp를 가리 킵니다 임시을 따르

Tree* tem = &temp; 

주소를 temp으로 지정하십시오. 다음

temp = temp.GetLeft(); 

temp은 왼쪽 자식으로 변경됩니다. 그러나 tem은 여전히 ​​temp을 가리키고 있으므로이 결과가 표시됩니다.

왼쪽 자식이있는 temp을 변경할 이유가 없습니다. 나는 ... 당신이 왼쪽 아이를 개최합니다 새로운 변수를 선언 첫째

하지만를 제안 할 수 있습니다 :

당신은 당신의 클래스를 다시 작성해야

, 그것은 실수를 많이 가지고있다. 최소한 - 메모리 누출. 자신이 할당 한 메모리를 수동으로 해제해야합니다.

대신 스마트 포인터를 사용하고 Tree* 인 생성자를 인수로 사용하지 마십시오. 위험 할 수 있습니다.

so :

한 번에 모두 배우는 것이 좋습니다. 그러나 이것은 작동하지 않습니다.

  • 학습 (사용 클래스는 별도로) 포인터를 사용하는 방법을
  • 학습 (사용하여 포인터 별도로) 클래스를 사용하는 방법을
  • 는 편은 포인터 포인터와 함께 클래스
+0

그래, 내가 실수를 저기에서 봤다 .. 메신저 트리를 만들려고 노력하기 때문에 왼쪽과 오른쪽으로 temp를 움직여야합니다. 위 예제는 im이하려고하는 짧은 버전입니다. 임시 테이블을 따르지 않고 트리의 맨 위로 포인터를 만드는 방법은 무엇입니까? 클래스에 관해서는 나중에 문제를 해결할 방법을 모르기 때문에 나중에 해결할 것입니다. 나중에 문제를 해결할 것입니다. 감사합니다! –

+0

실제로 그들을 따로 사용하는 법을 배웠던 방식으로 .. 내 .. 내 강한 편이 아니다. (좋은 책은 찾을 수 없다. 내 책은 그걸 가르쳐주지 않는다.) –

+0

나는 이미 말했듯이 새로운'Tree' 객체를 선언하고 왼쪽 자식을 할당 할 수 있습니다. 그런 다음 별도로 사용할 수 있습니다. – soon

관련 문제