实现string类的操作符重载 + = > < == != >> <<
来源:互联网 发布:宜人贷网络异常 编辑:程序博客网 时间:2024/05/29 18:56
//MyString.h#pragma once#include <iostream>using namespace std;class MyString{private:char *m_ptr;//内存空间public:MyString(const char *str=NULL);//构造函数MyString(const MyString& obj); //拷贝构造函数~MyString(); //析构函数public:// + = > < == != >> <<MyString operator+(const MyString& obj); //连接MyString &operator=(const MyString& obj); //赋值bool operator>(const MyString& obj); //比较大小bool operator<(const MyString& obj); //比较大小bool operator==(const MyString& obj); //比较大小bool operator!=(const MyString& obj); //比较大小friend istream& operator>>(istream& in, MyString &obj); //输入流friend ostream& operator<<(ostream& out, const MyString& obj); //输出流};
//MyString.cpp#define _CRT_SECURE_NO_WARNINGS#include "MyString.h"MyString::MyString(const char *str)//构造函数{if (str == NULL){this->m_ptr = new char[1];this->m_ptr[0] = '\0';}else{this->m_ptr = new char[strlen(str)+1];strcpy(this->m_ptr, str);}}MyString::MyString(const MyString& obj) //拷贝构造函数{this->m_ptr = new char[strlen(obj.m_ptr) + 1];strcpy(this->m_ptr, obj.m_ptr);}MyString::~MyString() //析构函数{delete[] m_ptr;this->m_ptr = NULL;}MyString MyString::operator+(const MyString& obj) //连接{MyString tmp;delete[] tmp.m_ptr;tmp.m_ptr = new char[strlen(this->m_ptr) + strlen(obj.m_ptr) + 1];sprintf(tmp.m_ptr, "%s%s", this->m_ptr, obj.m_ptr);return tmp;}MyString &MyString::operator=(const MyString& obj) //赋值{if (this->m_ptr != NULL){delete[] m_ptr;this->m_ptr = NULL;}this->m_ptr = new char[strlen(obj.m_ptr) + 1];strcpy(this->m_ptr, obj.m_ptr);return *this;}bool MyString::operator>(const MyString& obj) //比较大小{if (-1 == strcmp(this->m_ptr, obj.m_ptr)){return true;}else{return false;}}bool MyString::operator<(const MyString& obj) //比较大小{if (1 == strcmp(this->m_ptr, obj.m_ptr)){return true;}else{return false;}}bool MyString::operator==(const MyString& obj) //比较大小{if (0 == strcmp(this->m_ptr, obj.m_ptr)){return true;}else{return false;}}bool MyString::operator!=(const MyString& obj) //比较大小{return !(*this==obj);}ostream& operator<<(ostream& out, const MyString& obj) //输出流{out << obj.m_ptr;return out;}istream& operator>>(istream& in, MyString &obj) //输入流{char tmp[1024 * 10];memset(tmp, 0, sizeof(tmp));in >> tmp;if (obj.m_ptr != NULL){delete[] obj.m_ptr;obj.m_ptr = NULL;}obj.m_ptr = new char[strlen(tmp) + 1];strcpy(obj.m_ptr, tmp);return in;}
//MyStringTest.cpp#include "MyString.h"using namespace std;void run(){MyString s1("abd");MyString s2("hello");MyString s3 = s2;MyString s4;//s1 = s2;s4 = s1 + s2;cout << s4 << endl;if (s1==s2){cout << "相等" << endl;}else{cout << "不相等" << endl;if (s1 < s2){cout << "s1<s2" << endl;}else if (s1 > s2){cout << "s1>s2" << endl;}}cout << s1 <<","<< s2 << endl;cin >> s4;cout << s4 << endl;}void main(){run();system("pause");}
0 1
- 实现string类的操作符重载 + = > < == != >> <<
- 设计一个string类,通过重载“+=”运算符,实现对两个string类对象m1,m2的操作。
- 十九、运算符重载(三)String类的改进实现、[]运算符重载、+运算符重载、+=运算符重载、<<运算符重载、>>运算符重载
- C++学习笔记:=操作符的重载实现
- C/C++ 之 ‘++’、‘+’、‘+=’、‘-’、‘()’、‘--’ 操作符的重载实现重载
- c++string类的操作符重载
- C++ 操作符=的重载
- 读书笔记:实现string类的构造函数、拷贝构造函数、析构函数、重载运算符=
- C++ primer学习: string的= 的运算符重载
- C++-重载操作符<< >> = + - * /
- C++ 重载=操作符
- 单链表中重载操作符“=”
- 通过重载类的成员操作符来实现对string 类的模拟
- String 类的拷贝构造函数, 赋值操作符重载, 算数操作符重载
- C++实现类String--含构造函数以及重载>>,<<,>,<,==,=
- 利用string类重载运算符!=比较string类字符串
- C++ 重载赋值操作符operator=的高级议题
- C++ 操作符重载 operator = 、operator <
- iOS开发常用国外网站清单
- 各种Cluster方法
- 启动apache遇到错误:httpd: Could not reliably determine the server's fully qualified domain name
- 从键盘输入一个字符串,再将其逆序输出
- Sublime Text 3中使用SublimeGit插件
- 实现string类的操作符重载 + = > < == != >> <<
- 判断线段相交思想
- XSS跨站测试代码大
- 【日常学习】【语法】STL之sort
- web.xml配置详解
- android通过httpClient请求获取JSON数据并且解析
- 实现修改HEX文件和S19文件的值
- 码农生涯杂记_1
- C++中 作用域及可见性