运算符重载(C++)2
来源:互联网 发布:java 网店系统 手机 编辑:程序博客网 时间:2024/05/23 18:02
接着上次的运算符重载:
先给出以下代码用于引出后面的运算符重载函数:
class STR{public: STR(char *str= "") //构造函数 { m_str = new char[strlen(str)+1]; strcpy(m_str, str); } STR(char c) //构造函数 { m_str = new char[2]; m_str[0] = c; m_str[1] = '\0'; } STR(char c, int n) //构造函数 { m_str = new char[n+1]; memset(m_str, c, n); //关键 m_str[n] = '\0'; //注意是m_str[n] = '\0' } ~STR() //析构函数 { if(m_str != NULL) { delete []m_str; m_str = NULL; } } STR(STR &s) //拷贝构造函数 { m_str = new char[strlen(s.m_str)+1]; strcpy(m_str, s.m_str); } void print() { cout<<m_str<<endl; }private: char *m_str;};void main(){ STR a("abcd"); a.print(); STR b('e'); b.print(); STR c('f',3); c.print();}
- 赋值运算符重载:
STR& STR:: operator=(STR &s) //赋值重载函数 { if(this == &s) //判断赋值的内容是否一样 return *this; if(m_str != NULL) { delete []m_str; //将m_str的空间释放 } m_str = new char[strlen(s.m_str)+1]; //为m_str重新开辟空间 strcpy(m_str, s.m_str); //将s.m_str的内容复制到m_str中 return *this; } //主函数 void main(){ STR a("abcd"); a.print(); STR b('e'); b.print(); STR c('f',3); c.print(); (a=b).print();}
运行结果如下:
2. 加法运算符:
STR STR::operator+(STR &s) { char *p = new char[strlen(m_str) + strlen(s.m_str) + 1]; //因为要将两个字符串连接起来,所以要先开辟一个能存放两个字符串的空间 strcpy(p, m_str); //先将m_str拷贝到p中 strcat(p, s.m_str); // 再将s.m_str连接到p的后面 STR t(p); //因为要将p空间释放掉,所以必须将p中的内容放在一个对象中 delete []p; //将p释放掉 p = NULL; return t; //将t返回 } //主函数 void main(){ STR a("abcd"); a.print(); STR b('e'); b.print(); STR c('f',3); c.print(); (a+b).print();}
运行结果:
3. +=运算符重载:
STR& STR:: operator+=(STR &s) { char *p = new char[strlen(m_str) + strlen(s.m_str) + 1]; strcpy(p,m_str); strcat(p,s.m_str); m_str = p; return *this; } //主函数 void main(){ STR a("abcd"); a.print(); STR b('e'); b.print(); STR c('f',3); c.print(); (a+=c).print();}
测试结果如下:
4. [ ]运算符重载:
char STR:: operator[](int i) { if(i>0 && i<strlen(m_str)) return m_str[i]; } //主函数 void main(){ STR a("abcd"); a.print(); STR b('e'); b.print(); STR c('f',3); c.print(); cout<<a[3]<<endl;}
运行结果:
5. ==运算符重载:
bool STR::operator==(STR &s) { return strcmp(m_str,s.m_str) == 1; } //主函数 void main(){ STR a("abcd"); a.print(); STR b('e'); b.print(); STR c('f',3); c.print(); cout<<(a==c)<<endl;}
运行结果:
以下的运算符重载就不给运行结果了:
6. !=运算符重载:
bool STR::operator!=(STR &s) { return !(*this==s); //或者写成return !(m_str==s.m_str); }
- >运算符重载:
bool STR::operator>(STR &s) { return strcmp(m_str,s.m_str)==1; }
8.
operator char*() //类型转换 { return m_str; }
阅读全文
0 0
- 运算符重载(C++)2
- 运算符重载(c++)
- 重载赋值运算符(c/c++)
- C++-运算符重载
- [C++]重载运算符
- C#:运算符重载
- c++-++运算符重载
- C++:重载运算符
- 运算符重载(C++)
- [c++]运算符重载
- 【C++】运算符重载
- C++--------------------------------------------运算符重载
- C#:运算符重载
- C++:运算符重载
- C++:运算符重载
- C#:运算符重载
- [C++]运算符重载
- 【c++】运算符重载
- SSD-Tensorflow学习
- uSens凌感推出基于SLAM的移动端Inside-out位置追踪技术
- 大牛给计算机专业学生的7个建议
- Python起步之面向对象程序设计
- MMU和cache详解(TLB机制)
- 运算符重载(C++)2
- 2017(二)软件安装
- BZOJ 3732 Network —— 最小生成树 + 倍增LCA
- Java 结构体之 JavaStruct 使用教程<二> JavaStruct 用例分析
- 正则表达式笔记
- datetimepicker控件 只显示年月日
- Tensorflow:tf.flags的用法
- java从入门到精通第四版明日科技书籍简介及下载
- 为Linux服务器设置静态IP的方法