0

我有这门课(我知道,太可怕了..我刚开始使用 c++ 中的类,指针对我来说有点难了.. :) ):

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 片叶子,依此类推..)所以我这样做了:

Tree temp(5);
Tree* tem = &temp;
temp.SetInfo(10);
temp.SetLeft(5);
temp = temp.GetLeft();
cout << tem->GetInfo();

希望tem指向树的头部,但它只是跟随温度.. 有没有办法轻松做到这一点?

你们能帮我上课吗?我很难将指针和类 S 结合起来:

谢谢!

4

1 回答 1

1

希望 tem 指向树的头部,但它只是跟随温度

当然,它会指向temp, 因为这里:

Tree* tem = &temp;

您为其分配地址temp。然后

temp = temp.GetLeft();

temp用它的左孩子改变。但是tem仍然指向temp,这就是你得到这个结果的原因。

我看不出有什么理由改变temp它的左孩子。我可以建议你声明一个新变量,它将容纳一个左孩子......

但首先:

你必须重写你的课程,它有很多错误。至少 - 内存泄漏。如果您(自己)分配了内存,则必须手动释放它。

取而代之的是,使用智能指针,不要使用构造函数Tree*作为参数。这可能很危险。

所以:

一次学习所有内容真是太好了。但这不起作用

  • 学习,如何使用指针(与使用类分开)
  • 学习,如何使用类(与使用指针分开)
  • 一起学习指针和类
于 2013-10-12T09:50:49.453 回答