等号运算符的重载这里有疑问,已解决

#define  _CRT_SECURE_NO_WARNINGS 
#include<iostream>

using namespace std;

//等号运算符的重载
class Array
{
public:
	//int strlen(char *)
	Array(char *t1)
	{
		this->length=strlen(t1);
		this->p = new char [length +1];
		strcpy(p,t1);
	}
	Array(const Array &t2)
	{
		this->length=t2.length;
		this->p = new char [length +1];
		strcpy(p,t2.p);
	}
	
	Array& operator=(Array &obj1)
	{
		//先释放旧的内存
		if (this->p != NULL)
		{
			delete[] p;
			length = 0;
		}
		//2 根据obj1分配内存大小
		this->length = obj1.length;
		this->p = new char [length+1];
		
		//把obj1赋值
		strcpy(p, obj1.p);
		return *this;
	}

	~Array()
	{
		if(*p !=NULL)
		{
			delete [] p;
			length=0;
		}
	}
	void printf()
	{
		cout<<this->p;
	}

private:
	int length;
	char *p;
protected:
};

int main()
{
	Array a1("dasfsf");
	Array a2=a1;//调用赋值构造函数,必须重新定义,要不然是浅拷贝,出错
	a2.printf();
	cout<<endl;
	Array a4("dasda");
	
	a4=a1;//浅拷贝,需重新定义等号。
	a4.printf();
	cout<<endl;

	system("pause");
	return 0;
}

  上图这样子是对的,但是为什么给形参默认值的时候,就会出错?

#define  _CRT_SECURE_NO_WARNINGS 
#include<iostream>

using namespace std;

//等号运算符的重载
class Array
{
public:
	//int strlen(char *)
	Array(char *t1=0)
	{
		this->length=strlen(t1);
		this->p = new char [length +1];
		strcpy(p,t1);
	}
	Array(const Array &t2)
	{
		this->length=t2.length;
		this->p = new char [length +1];
		strcpy(p,t2.p);
	}
	
	Array& operator=(Array &obj1)
	{
		//先释放旧的内存
		if (this->p != NULL)
		{
			delete[] p;
			length = 0;
		}
		//2 根据obj1分配内存大小
		this->length = obj1.length;
		this->p = new char [length+1];
		
		//把obj1赋值
		strcpy(p, obj1.p);
		return *this;
	}

	~Array()
	{
		if(*p !=NULL)
		{
			delete [] p;
			length=0;
		}
	}
	void printf()
	{
		cout<<this->p;
	}

private:
	int length;
	char *p;
protected:
};

int main()
{
	Array a1("dasfsf");
	Array a2=a1;//调用赋值构造函数,必须重新定义,要不然是浅拷贝,出错
	a2.printf();
	cout<<endl;
	Array a4("dasda");
	Array a3;
	a3=a4;//浅拷贝,需重新定义等号。
	a3.printf();
	cout<<endl;

	system("pause");
	return 0;
}

  运行没有错误,但是编译不出来

我的天啊,在大大神的帮忙下,终于解决了,原因是Strlen不能应用于NULL指针。

遇见问题要一步一步分析精确到一行,我的天啊,感觉自己还有差距

posted @ 2017-03-21 19:12  小陈同学啦  阅读(1279)  评论(0编辑  收藏  举报