c++第一次作业(2024.9.2)

自己写一个string类

如:

代码:

#include <iostream>
#include <cstring>

using namespace std;

class Mystring{
	private:
		int len;
		char* str;

	public:
		//无参构造函数
		Mystring(){
			len = 0;
			str = nullptr;
		}
		//有参构造函数
		Mystring(const char* s){
			len = strlen(s);
			str = new char[len];
			strcpy(str,s);
		}
		//拷贝构造函数
		Mystring(Mystring &s):len(s.len),str(new char[s.len])
		{
//			len = s.len;
//			//str = s.str;
//			new char[len];
			strcpy(str,s.str);
		}
		//拷贝赋值函数
		Mystring& operator=(const Mystring &s){
			if(&s == this)
				return *this;

			len = s.len;
			if(nullptr == str){
				str = new char[s.len];
			}
			strcpy(str,s.str);
			return *this;
		}
		//析构函数
		~Mystring(){
			cout<<&str<<"析构函数\n";
			if(nullptr != str)
				delete []str;
			str = nullptr;
		}
		//c_str()
		char* myc_str(){
			return this->str;
		}
		//length()
		int mylength(){
			return this->len;
		}
		//empty()
		bool myempty(){
			cout<<"判空\n";
			if(len == 0){
				return 1;
			}
			return 0;
		}
		//at()
		char& myat(int x){
			if(x>=len || x<0)
				throw "数组下标越界!\n";
			return str[x];
		}

};

int main(int argc, const char *argv[])
{
	Mystring str0;
	cout<<str0.myempty()<<endl;
	Mystring str1("12345");
	str0 = str1;
	cout<<"str1="<<str1.myc_str()<<"\nlen="<<str1.mylength()<<endl;
	cout<<"str0="<<str0.myc_str()<<"\nlen="<<str0.mylength()<<endl;
	str0.myat(3) = 'h';
	cout<<"str0="<<str0.myc_str()<<"\nlen="<<str0.mylength()<<endl;
	try{
		str0.myat(10) = 'j';
	}catch(const char* err){
		cerr<<err;
		//cout<<str0.myc_str()<<endl;
	}
	Mystring str2(str0);
	cout<<"str2="<<str2.myc_str()<<"\nlen="<<str2.mylength()<<endl;
	return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值