C++ 经典练习实现MyString类

私有变量只有一个指针

char * p;

字符串构造函数

	MyString(const char * s=NULL) {
		if (s) {
			p = new char[strlen(s) + 1];
			strcpy(p, s);
		}
		else {
			p = new char[1];
			p[0] = '\0';
		}
	}

析构函数

~MyString() { if (p) delete[] p; }

拷贝构造函数

	MyString(const MyString &s) {
		if (s.p) {
			p = new char[strlen(s.p) + 1];
			strcpy(p, s.p);
		}
		else {
			p = new char[1];
			p[0] = '\0';
		}
	}

输出重载函数

friend ostream & operator<< (ostream & os, MyString &s) {
		os << s.p;
		return os;
	}

赋值运算符重载右边为MyString对象

	MyString& operator = (const MyString &s) {
		if (p == s.p)
			return *this;
		if (p != NULL)
			delete p;
		if (s.p) {
			p = new char[strlen(s.p) + 1];
			strcpy(p, s.p);
		}
		else {
			p = new char[1];
			p[0] = '\0';
		}
		return *this;
	}

赋值运算符重载,右边为字符串

	MyString & operator=(const MyString & s){
		if (p == s.p)
			return *this;
		if(p!=NULL)
			delete[] p;
		if (s.p){
			p = new char[strlen(s.p) + 1];
			strcpy(p, s.p);
		}
		else{
			p = new char[1];
			p[0] = '\0';
		}
		return *this;
	}

三个字符串比较重载函数

bool operator <(MyString &s2) {
		return strcmp(p, s2.p) == -1;
	}

	bool operator >(MyString &s2) {
		return strcmp(p, s2.p) == 1;
	}

	bool operator ==(MyString &s2) {
		return strcmp(p, s2.p) == 0;
	}

加法重载

MyString operator+(MyString &s2) {
		char* p_ = new char[strlen(p) + strlen(s2.p) + 1];
		strcpy(p_, p);
		strcat(p_,s2.p);
		return MyString(p_);
	}

+=重载

MyString & operator+=(const char *s)
	{
		char* temp = new char[strlen(p)+1];
		strcpy(temp, p);
		delete[] p;
		p = new char[strlen(temp) + strlen(s)+1];
		strcpy(p, temp);
		strcat(p, s);
		return *this;
	}
friend MyString  operator+(const char * str, MyString s )
	{
		char *temp = new char[strlen(str) + strlen(s.p)+1];
		strcpy(temp,str);
		strcat(temp, s.p);
 
		return MyString(temp);
 
	}
 
	friend MyString operator+(MyString s, const char *str)
	{
		char *temp = new char[strlen(s.p) + strlen(str) + 1];
		strcpy(temp, s.p);
		strcat(temp, str);
		return MyString(temp);
	}

 

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值