重写大部分类，但是可能是复制构造函数的问题，目前指针传值会发生改变，因此有一些小bug