C++重载赋值操作符

        类似于C语言写strcpy函数,C++里面重载赋值操作符也是一个很基本但也很能考察C++编程者编程习惯的小测试。写这个程序的过程会反应出编程者的许多编程习惯和对C++的掌握程度,要想写好它还真不是那么容易。下面的小程序是我自己写的重载操作,经过了一些测试,有问题请大家指出斧正。

 

// C++FuncOverloading.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "iostream"
#include "windows.h"
using namespace std;

class String
{
public:
	String(const char *str = NULL); //普通构造函数     
	~String(void); //析构函数 
	String& operator=(const String &other); //赋值函数
	void print();//输出
private:     
	char *m_data; // 用于保存字符串  
};

String::String(const char *str)
{
	printf("Constructor!\n");
	if(str==NULL)
	{
		m_data = new char[1];
		m_data[0] = '\0';
	}
	else
	{
		m_data = new char[strlen(str)+1];
		strcpy(m_data,str);
	}
}

String::~String()
{
	delete[] m_data;
	m_data = NULL;
	printf("destructor\n");
}

String& String::operator=(const String &other)  //这里返回的参数或传入参数若不是String类型的引用,会调用类的拷贝构造函数
{
	//如果写成了if(*this==other),真该好好反省
	if(this == &other)   //这里判断是否为对象本身
		return *this;
	else
	{
		if(m_data!=NULL)
		{
			//这里如果不释放原有的内存,将会造成严重的内存泄漏,可以测试一下如果不释放内存然后while(1)循环“=”操作,程序瞬间吃掉计算机所有内存
			delete[] m_data;
			m_data = NULL;//比较习惯于释放了指针指向的内存资源时,将该指针赋值为空值,以防出现"野指针"的情况
		}
		m_data = new char[strlen(other.m_data)+1];
		strcpy(m_data,other.m_data);
		return *this;
	}
}

void String::print()
{
	cout << m_data << endl;
}

int _tmain(int argc, _TCHAR* argv[])
{
	String a("I am a test string");
	String b,c;
	c=b=a;
	b.print();
	c.print(); 
	//while(1)
	//	b=a;
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值