data[len]='\0'; }~String() {//析构函数cout <<"析构函数被调用"<<endl;delete[]data;//释放内存data = NULL;//置空指针} String&operator= (constString &other) {//赋值构造函数cout <<"赋值运算符构造函数被调用"<<endl;intlen =strlen(other.data); data=newchar[len +1];for(inti =0;...
类String拷贝构造函数与普通构造函数的区别是:在函数入口处无需与NULL进行比较,这是因为“引用”不可能是NULL,而“指针”可以为NULL。 类String的赋值函数比构造函数复杂得多,分四步实现: (1)第一步,检查自赋值。你可能会认为多此一举,难道有人会愚蠢到写出a = a这样的自赋值语句!的确不会。但是间接的自赋值...
1、string是表示字符串的字符串类 2、该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。 3、string在底层实际是:basic_string模板类的别名 typedef basic_string<char, char_traits, allocator> string; 4、不能操作多字节或者变长字符的序列。 3.string类的常见构造及模拟实现 3.1st...
以下程序实现一个简化的字符串类。在类String中,定义了拷贝构造函数;重载的运算符“+=”,实现了字符串类的复合赋值运算。 #include #include class String{ protected: char *s; public: String(char *p=0){ if(p==0) s=0; else{ s=new char[strlen(p)+1]; strcpy(s,p);...
当某个函数的入参是类对象时,拷贝构造函数会被调用; 当我们基于一个已有的对象去生成一个新的对象时(即新对象的内容和已有对象完全一样),拷贝构造函数会被调用。 以上两种情况本质上是一样的。 手写String 类 classString{private:char*m_Buffer;unsignedintm_Size;public:String(constchar*string){m_Size=strle...
编写类String 的构造函数,析构函数,拷贝构造函数和赋值函数 classString{public:String(constchar*str=NULL);//构造函数String(constString &other);//拷贝构造函数~String(void);//析构函数String&operator=(constString &other);//等号操作符重载ShowString();private:char*m_data;//指针}; ...
~String(){ delete []sPtr;} void print(){ cout<<sPtr<<endl;} size_t getLength(){ return length;} friend ostream &operator<<(ostream &, const String &);//要求实现的函数 String& insert(size_t pos1,const String& str);String& insert(size_t pos1,const char * s,size_t...
本章以类String的设计与实现为例,深入阐述被很多教科书忽视了的道理。String的结构如下: class String { public: String(const char *str = NULL); // 普通构造函数 String(const String &other); // 拷贝构造函数 ~ String(void); // 析构函数 ...
String::String(const String &other)//拷贝构造函数,功能与构造函数类似。 { int length=strlen(other.m_data); m_data=new [length+1]; strcpy(m_data,other.m_data); } String& String::operator =(const String &other) { if (this==&other)//当地址相同时,直接返回; ...
String::~String(void) { delete []m_data; } (3)拷贝构造函数 String::String(const String &other) { Int length = strlen(other); m_data = new char[length+1]; Strcpy(m_data,other.m_data); } (4)赋值函数 String & String::operate = (const String &other) { If(this == &other)...