我有这门课(我知道,太可怕了......我刚刚开始使用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 指向树的头部,但它只是跟随 temp .. 有没有办法轻松做到这一点?
你能帮我上课吗? 我很难将指针和类组合起来S:谢谢!
答案 0 :(得分:1)
希望tem指向树的头部,但它只是跟着温度
当然,它会指向temp
,因为这里:
Tree* tem = &temp;
您为其分配地址temp
。然后
temp = temp.GetLeft();
你改变了temp
左边的孩子。但是tem
仍然指向temp
,这就是你得到这个结果的原因。
我没有看到任何改变temp
左边孩子的原因。我可以建议你宣布一个新的变量,它将保留一个左子...
你必须重写你的课程,它有很多错误。至少 - 内存泄漏。如果您已经(自己)分配了内存,则必须手动释放它。
而不是它,使用智能指针,不要使用带Tree*
的构造函数作为参数。这可能很危险。
一次学习所有内容真是太棒了。 但这不起作用。