C++简易字符串类

#include<cstring>
#include<iostream>
using namespace std;

class s{
	public:
		s();
		s(const char* c);
		s(const s& s2);
		void print1();
		s& operator=(const s& s2);
		~s();
	private:
		char* p;
};

s::s(const char* c){
	int len=strlen(c);
	if(0==len){
		p=new char('\0');
	}else{
		p=new char[len+1];
		memcpy(p,c,len+1);
	}
}

void s::print1(){
	cout<<p<<endl;
}

s::s():p(new char[1]){
	*p='\0';
};

s::s(const s& c){
	int len=strlen(c.p);
	if(0==len){
		p=new char('\0');
	}else{
		p=new char[len+1];
		memcpy(p,c.p,len+1);
	}
}

s& s::operator=(const s& c){
	s c2(c);
	std::swap(p,c2.p);
	return *this;
}

s::~s(){
	if(p){
		delete [] p;
		p=NULL;
		cout<<"对象被析构。"<<endl;
	}
}

int main(){
	s s1("hello world!");
	s1.print1();
	s s2(s1);
	s2.print1();
	s s3;//默认构造函数不能带括号,为方法
	s3.print1();
	s3=s2;
	s3.print1();
	return 0;
}

 

转载于:https://my.oschina.net/zengjs275/blog/1217714

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值