1.构造函数:
#include<stdio.h> #include<string.h> class String{//创建一个String类 public: String(char*str=" ") { int length =strlen(str); _str = new char[length+1]; strcpy(_str,str);//拷贝字符串 } void prit();//声明一个类成员函数打印字符串打印字符串 private: char*_str; }; void String::prit()//没有返回值,添加void(注意) { printf("%s",_str); } int main() { String s1="String"; s1.prit();//打印String return 0; }
2.对"="进行操作符重载:
#include<string.h> #include<stdio.h> using namespace std; class String{ public: String(){};//构造函数(我觉得写不写好像都一样) String(char*str){ int len=strlen(str); _str=new char[len+1]; strcpy(_str,str); } String operator=(String str)//对"="进行操作符重载 { int len=strlen(str._str);//获取字符串长度 _str=new char[len+1];//申请空间 char* s=_str; for(;*str._str;++*str._str,++s)//可以直接用strcpy函数 { *s=*str._str; } *s='\0'; } void prit(); ~String(){};//析构函数(同上写不写都一样...) private: char*_str; }; void String::prit() { printf("%s\n",_str); } int main() { String s1="hello"; s1.prit(); String s2=s1; s2.prit(); return 0; }
3:浅拷贝:
#include<string.h> #include<stdio.h> class String{ public: String(const String &s)//如果只是传递该类的类类型,没有加引用,会报错 { _str=s._str;//传递字符串指针 } String(char*str=" ") { int length =strlen(str); _str = new char[length+1]; strcpy(_str,str); } void prit(); private: char*_str; }; void String::prit() { printf("%s\n",_str); } int main() { String s1="hello"; String s2(s1); s2.prit(); return 0; }
4.对>>和<<进行重载:
#include<iostream> #include<string.h> using namespace std; class String { public: String(char*str="") { int len=strlen(str); s=new char[len+1]; strcpy(s,str); } String operator=(String str) { s=str.s; } friend ostream &operator<<(ostream &output, const String &ss) { output<<ss.s; return output; } friend istream &operator >> (istream &input, String &ss) { char temp[100]; input>>temp; ss=temp; return input; } private: char*s; }; int main() { String s="hello"; String s1; cout<<s<<endl; cin>>s1; cout<<s1; return 0; }
学的不太扎实,就先写这么多了,等以后再回来修改,补齐