构造函数怎么写
我新建了一个类,但是该类中有自己类的指针,他的构造函数该怎么写?
class treenode
{
public:
treenode(treenode* left,treenode* right);
virtual ~treenode();
virtual int GetValue();
private:
treenode* leftnode;
treenode* rightnode;
};
treenode::treenode(treenode* left,treenode* right)
{
if(leftnode) delete leftnode;
if(rightnode) delete rightnode;
leftnode=new treenode; //这两句因为用了new出错
rightnode=new treenode;
memcpy(leftnode,left,sizeof(treenode));
memcpy(rightnode,right,sizeof(treenode));
}
[解决办法]
#include<iostream>using namespace std;class tree{ int data; tree *left; tree *right;public: tree()//默认构造函数 { data=0;left=NULL;right=NULL; } tree(int n):data(n),left(NULL),right(NULL){}//含参数的构造函数 ~tree()//析构函数 { delete left; delete right; } tree(const tree &a)//复制构造函数,const是防止a的值被更改(可以不要const) //一定要加引用,原因自己看书 { data=a.data; left=a.left; right=a.right; } int getdata()//取节点值 {return data;} tree* getleft()//取左指针 {return left;} tree* getright()//取右指针 {return right;}};int main(){ tree a(5);//有参数构造 cout<<"输出a点的数值"<<endl; cout<<a.getdata()<<endl; tree b;//默认构造 cout<<"输出b点的数值"<<endl; cout<<b.getdata()<<endl; tree c(a);//复制构造 cout<<"输出c点的数值"<<endl; cout<<c.getdata(); cout<<endl; //程序结尾时系统自动调用析构函数 return 0;}