一定要记录这一刻
(指针果然是个坑)
父类与子类之间的转换 很迷 很神奇
&与*的神奇功效还有待探索
今日研究二叉树,对setRight与setLeft函数作用有点疑惑
以下为自己的小思考,仅供参考
版本一
#include<iostream>
using namespace std;
template <typename Elem>
class BinNode {
public:
virtual void setRight(BinNode&) = 0; //划重点
};
template <class Elem>
class BinNodePtr : public BinNode<Elem>
{private:
Elem it;
BinNodePtr* lc;
BinNodePtr* rc;
public:
BinNodePtr() { lc = rc = nullptr; }
BinNodePtr(Elem e, BinNodePtr* l = nullptr,BinNodePtr* r = nullptr)
{
it = e; lc = l; rc = r;
}
void setRight(BinNode<Elem> &b) //划重点
{
rc = (BinNodePtr*)&b;
}
};
int main()
{
BinNodePtr<int> t(3,nullptr,nullptr);
BinNodePtr<int>tr(3, nullptr, nullptr);//划重点
t.setRight(tr); //划重点
}
此时 b 类型:BinNode< int > & {BinNodePtr< int >}
版本二
#include<iostream>
using namespace std;
template <typename Elem>
class BinNode {
public:
virtual void setRight(BinNode*) = 0;//划重点
};
template <class Elem>
class BinNodePtr : public BinNode<Elem>
{private:
Elem it;
BinNodePtr* lc;
BinNodePtr* rc;
public:
BinNodePtr() { lc = rc = nullptr; }
BinNodePtr(Elem e, BinNodePtr* l = nullptr,BinNodePtr* r = nullptr)
{
it = e; lc = l; rc = r;
}
void setRight(BinNode<Elem> *b)//划重点
{
rc = (BinNodePtr*)b;
}
};
int main()
{
BinNodePtr<int> t(3,nullptr,nullptr);
BinNodePtr<int>* tr=new BinNodePtr<int>(3, nullptr, nullptr);//划重点
t.setRight(tr);//划重点
}
此时 b 类型:BinNode< int > * {BinNodePtr < int > }