马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
标题:计划字符串类, 支持下面的操作
MyString s1; // 默认构造函数
MyString s2("hello"); // 含参构造函数
MyString s3(s1); // 传参构造函数
MyString s4(5, 'c'); // 自定义构造函数
= // 运算符重载
== != > < // 运算符重载
代码:
- #include <iostream>
- #include <cstring>
- using namespace std;
- class Mystring{
- // <<
- friend ostream& operator<<(ostream &out,Mystring &s);
- // >>
- friend istream& operator>>(istream &in,Mystring &s);
- private:
- char *m_space; // 存储数据
- size_t m_len; // 字符串长度
- public:
- // 默认构造函数
- Mystring(){
- m_space = new char;
- strcpy(m_space,"");
- m_len = 0;
- }
- // 构造函数
- Mystring(const char *indata){
- m_len = strlen(indata);
- m_space = new char[m_len + 1];
- strcpy(m_space,indata);
- }
- // 拷贝构造函数(深拷贝)
- Mystring(const Mystring &s){
- m_len = s.m_len;
- m_space = new char[m_len + 1];
- strcpy(m_space,s.m_space);
- }
- // 析构函数
- ~Mystring(){
- if(m_space != nullptr){
- delete [] m_space;
- m_space = nullptr;
- }
- }
- // 重载赋值运算符 =
- Mystring& operator=(const Mystring &s){
- if(m_space != nullptr){
- delete [] m_space;
- m_space = nullptr;
- }
- m_len = s.m_len;
- m_space = new char[m_len + 1];
- strcpy(m_space,s.m_space);
- return *this;
- }
- };
- // <<
- ostream& operator<<(ostream &out,Mystring &s){
- out<<s.m_space;
- return out;
- }
- istream& operator>>(istream &in,Mystring &s){
- // 对之前的内存进行管理(避免内存泄漏)
- if(s.m_space != nullptr){
- delete [] s.m_space;
- s.m_space = nullptr;
- }
- // 输入新的字符串
- char buf[1024];
- in>>buf;
- s.m_len = strlen(buf);
- s.m_space = new char[s.m_len + 1];
- strcpy(s.m_space,buf);
- return in;
- }
- int main(){
- Mystring s1;
- Mystring s2("Hello");
- cout<<"Please input data:"<<endl;
- cin>>s2;
- s1 = s2;
- cout<<"s2: "<<s2<<endl;
- cout<<"s1: "<<s1<<endl;
- return 0;
- }
复制代码 输出:
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |