知识点:
构造函数的使用,以及构造函数对的重载操作
析构函数使用,当对象消亡时,在系统收回它所占的内存空间之前,会自动调用对象类的析构函数
字符串类常用操作length,返回字符串指针,合并添加append,复制copy
#include<iostream>
#include<cstdlib>
#include<cstring>
using namespace std;
class String
{
char *str;
public:
String(){//析构函数
str=NULL;
}
String(const char *p){//重载函数
str=new char[strlen(p)+1];
strcpy(str,p);
}
~String(){//析构函数程序结束的时候调用6
delete []str;
str=NULL;//视情况而定
}
int length(){return strlen(str);}
char &char_at(int i){//返回目标并引用
if(i<0||i>=strlen(str)){
cerr<<"超出字符串范围!\n";
exit(-1);//异常退出,返回-1
}
return str[i];
}
const char*get_str(){return str;}
String ©(const char*p){
delete []str;
str=new char[strlen(p)+1];
strcpy(str,p);
return *this;//返回的是当前对象的克隆或者本身,return this返回当前对象的地址
}
String ©(const String &s){return copy(s.str);}
String &append(const char *p){
char *p1=new char[strlen(str)+strlen(p)+1];
strcpy(p1,str);
strcat(p1,p);
delete []str;
str=p1;
return *this;
}
String &append(const String &s){
return append(s.str);
}
int compare(const char *p){return strcmp(str,p);}
int compare(const String &s){return strcmp(str,s.str);}
};
int main(){
String s1;
String s2("abcdefg");
s1.copy("xyz");
s2.append(s1);
for(int i=0;i<s2.length();i++){
if(s2.char_at(i)>='a'&&s2.char_at(i)<='z'){
s2.char_at(i)=s2.char_at(i)-'a'+'A';
}
}
if(s2.compare("ABCDEFGXYZ")==0)cout<<"OK\n";
cout<<s1.get_str()<<endl<<s2.get_str()<<endl;
return 0;
}
结果显示如下:
![](https://i-blog.csdnimg.cn/blog_migrate/98d521eca2cd1005e17d0494dc30be37.png)