string类的构造函数,析构函数,拷贝构造函数还有就是赋值函数,然后加上strcpy的函数

OK,昨天没写啥,浪费一天,今天赶紧补上,看到一个博客里写着:如果能够完全无误的写出string的四个函数:构造,析构,拷贝构造。赋值函数,那么就掌握了C++基础的60%!60!于是今天果断去练习了下,结果惨不忍睹,唉,看来我20%都没到,还是要加油了。首先上代码:

#include<iostream>
using namespace std;
class String
{ public:
String(const char *str);
~String();
String( const String &other);
String op(String &one,String &two);
private:
char *m_data;
};

String::String(const char *str)
{ if(str==NULL)//判断一下是否是空字符
{m_data=new char[1];
*m_data='\0';
}
else
{m_data=new char[strlen(str)+1];//需要的空间是len+1,因为len取的值不包括空字符'\0'
strcpy(m_data,str);}

}
String::~String()//析构函数
{delete []m_data;
}
String::String(const String &other)//拷贝构造函数
{ if(other.m_data==NULL)
{m_data=new char[1];
*m_data='\0';
}
else
{m_data=new char[strlen(other.m_data)+1];
strcpy(m_data,other.m_data);
}
}
String String::op(String &one,String&two)
{ if(one.m_data==two.m_data)
return one.m_data;
delete []one.m_data;
one.m_data=new char[strlen(two.m_data)+1];
strcpy(one.m_data,two.m_data);
}
class c_fn
{public:
char *strcpy(char*,char*);
};
char *c_fn::strcpy(char *dest,char *sour)//strcpy函数
{ if(dest==sour)
return dest;
else
if(sour==NULL)
return NULL;
else
{dest=sour;
return dest;}

}
int main()
{
}


首先第一,这个弄char指针的时候么,因为对象和成员都是char型的,所以最好弄成const char*,这样保险,表示指针的类型就是char不能改变。

然后第二,这个构造函数,我们就是对成员数据进行赋值,所以这里有两个注意点:第一啊,要检验下赋值是不是空的,然后啊这个成员数据就要开辟一个空间,来存放'\0',记住string默认初始化是空串,所以不能是NULL,要加个空字符,第二点,当赋值不是NULL,那么成员数据开辟的这个长度就是len+1,因为 strlen取值是不把空字符算进去的。

接着第三:拷贝构造函数,就是通过其他对象来对成员函数进行初始化,注意点和默认构造一样啦。

然后第四:赋值,这个其实就是对象之间的赋值,不过这个对象赋值首先我们必须要判断下两个对象数据是不是一样,一样直接return一个就OK啦,因为这个是赋值而不是构造,所以不用空串,另外如果不一样,那么说不定两个对象所占空间不一样,这个时候我们就要先销毁掉原来的,然后通过另一个对它赋值,就这么简单,OK

最后,C++多抓基础,探究到底,明天开始做项目,争取一天一个,为了把基础都巩固起来,就是这样。

posted @ 2012-02-15 23:23  RINA  阅读(1756)  评论(0编辑  收藏  举报