北大mooc MyString

如下问题:

1.对象只有初始化的时候才会调用构造函数,包括复制构造函数;
2.赋值运算符重载。返回类型应为引用。以防连续赋值 a = b =c,重载时要考虑到自己给自己赋值的情况

#include <iostream>
#include <string>
#include <cstring>
#include <cstdlib>
using namespace std;
class MyString {
	char * p;
public:
	MyString(const char * s) {
		if(s) 
		{
			p = new char[strlen(s) + 1];
			strcpy(p,s);
		}
		else
			p = NULL;

	}
	~MyString() { if(p) delete [] p; }
	
	MyString(MyString & s){//复制构造函数 ,初始化时使用,不具备初值。
		if(s.p) {
			p = new char[strlen(s.p) + 1];
			strcpy(p,s.p);
		}
		else
			p = NULL;
	}
	void Copy(const char * s){
			if(p) delete [] p;
			if(s)
			{
			p = new char[strlen(s) + 1];
			strcpy(p,s);
			}
			else
				p = NULL;
	}
	friend ostream & operator<<(ostream & c,MyString & s)
	{
		cout<<s.p;
		return c;
	};
	MyString & operator=(MyString &s)
	{
		if(this == &s) return *this;
		
			delete [] p;
			
			if(s.p)
			{
				p = new char[strlen(s.p) + 1];
				strcpy(p,s.p);
			}
			else
				p = NULL;
			return *this;
	}
	MyString & operator=(char * s)
	{		
			delete [] p;			
			if(s)
			{
				p = new char[strlen(s) + 1];
				strcpy(p,s);
			}
			else
				p = NULL;
			return *this;
	}
};
int main()
{
	char w1[200],w2[100];
	while(cin>>w1>> w2) {
		MyString s1(w1),s2 = s1;//1.复制构造函数 
		MyString s3(NULL);
		s3.Copy(w1);//2.Copy函数的实现 
		cout << s1 << "," << s2 << "," << s3 << endl;//<<流输出符号重载 

		s2 = w2;//赋值符号的重载 
		s3 = s2;
		s1 = s3;
		cout << s1 << "," << s2 << "," << s3 << endl;
		 
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值