字符串类_运算符重载
来源:互联网 发布:卡通人物制作的软件 编辑:程序博客网 时间:2024/05/17 03:41
MyString.h
#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;//在这里定义类只写类的函数名,不写类的函数体//C中没有字符串,字符串(C风格字符串)//空串class MyString{public:MyString();MyString(const char *p );MyString(const MyString& s);~MyString();public://重载等号操作符//原型1 //s4= "s2222"MyString& MyString::operator=(const char *p);//原型2 //s4 = s2;MyString& MyString::operator=(const MyString &s);char& operator[](int index);//重载<<friend ostream& operator<<(ostream &out,MyString &s);//重载>>friend istream& operator>>(istream &in ,MyString &s);public://重载 == !=bool operator==(const char *p) const;bool operator==(const MyString& s) const;bool operator!=(const char *p)const;bool operator!=(const MyString& s) const ;public://重载 > < int operator<(const char *p);int operator>(const char *p);int operator<(const MyString& s);int operator>(const MyString& s);public:char *c_str(){return m_p;}const char *c_str2(){return m_p;}int length(){return m_len;}protected:private:int m_len;char *m_p;};
#include "MyString.h"MyString::MyString(){m_len = 0;m_p = new char[m_len + 1];strcpy(m_p,"");}MyString::MyString(const char *p ){if (p == NULL){m_len = 0;m_p = new char[m_len + 1];strcpy(m_p,"");}else{m_len = strlen(p);m_p = new char[m_len + 1];strcpy(m_p,p);}}//拷贝构造函数//MyString s3 = s2;MyString::MyString(const MyString& s){m_len = s.m_len;m_p = new char[m_len + 1];strcpy (m_p,s.m_p);}MyString::~MyString(){if (m_p != NULL){delete[] m_p;m_p = NULL;m_len = 0;}}MyString& MyString::operator=(const char *p){//旧内存释放掉if (m_p != NULL){delete [] m_p;m_len = 0;}//根据p分配内存if (p == NULL){m_len = 0;m_p = new char[m_len + 1];strcpy(m_p ,"");}else{m_len = strlen(p);m_p = new char[m_len + 1];strcpy(m_p ,p);}return *this;}//原型2 //s4 = s2;MyString& MyString::operator=(const MyString &s){//旧内存释放掉if (m_p != NULL){delete [] m_p;m_len = 0;}//根据s分配内存m_len = s.m_len;m_p = new char[m_len + 1];strcpy(m_p ,s.m_p);return *this;}ostream& operator<<(ostream &out,MyString &s){out<<s.m_p;return out;}char& MyString::operator[](int index){return m_p[index];}//重载== != //按alt,向下滑//if (s2 == "s22222")bool MyString::operator==(const char *p) const{if (p == NULL){if (m_len == 0){return true;}else{return false;}}else{//strcmp比较两个字符串//若str1==str2,则返回零;//若str1<str2,则返回负数;//若str1>str2,则返回正数。if (m_len == strlen(p)){return !strcmp(m_p,p);}else{return false;}}}bool MyString::operator!=(const char *p) const{return !(*this == p);} bool MyString::operator==(const MyString& s) const{if (m_len != s.m_len){return false;}if (strcmp(m_p,s.m_p)){return true;}}bool MyString::operator!=(const MyString& s) const{return !(*this == s);}//重载 < > //if (s3 < "bbbb")int MyString::operator<(const char *p){return strcmp(this->m_p,p);}int MyString::operator>(const char *p){return strcmp(p,this->m_p);}int MyString::operator<(const MyString& s){return strcmp(this->m_p,s.m_p);}int MyString::operator>(const MyString& s){return strcmp(s.m_p,m_p);}istream& operator>>(istream &in ,MyString &s){cin>>s.m_p;return in;}
MyString_Test.cpp
#include<iostream>using namespace std;#include "MyString.h"int main01(){MyString s1;MyString s2("s2");MyString s2_2 = NULL;MyString s3 = s2;MyString s4 = "s4444444";//测试运算符重载 和 重载 【】// = s4 = s2;s4= "s2222";s4[1] = '4';printf("%c",s4[1]);//第一步承认它是一个等号//原型1//MyString& operator=(const char *p)//原型2//MyString& operator=(const MyString &s)//s4[0];//char& operator[](int index)cout<< s4 <<endl;//ostream& operator<<(ostream &out,MyString &s)system("pause");return 0;}int main02(){MyString s1;MyString s2("s2");MyString s3 = s2;//bool operator==(const char *p);//bool operator==(const MyString& s);//bool operator!=(const char *p);//bool operator!=(const MyString& s);if (s2 == "s22222"){printf("相等\n");}else{printf("不相等\n");}if (s3 == s2){printf("相等\n");}else{printf("不相等\n");}system("pause");return 0;}int main03(){MyString s1;MyString s2("s2");MyString s3 = s2;s3 = "aaa";//int operator<(const char *p)//int operator>(const char *p)//int operator<(const Mystring& s)//int operator>(const Mystring& s)if (s3 < "bbbb"){printf("小于\n");}else{printf("大于\n");}/*if (s3 < s2){printf("小于\n")}else{printf("大于\n");}*//*MyString s4 = "aaaaffff";strcmp(s4.c_str(),"aa111");cout<<s4<<endl;*/system("pause");return 0;}/*还是有问题*///int main()//{//MyString s1(128);//cin>>s1;//////istream& operator>>(istream &in ,MyString &s);////system("pause");//return 0;//}
0 0
- 字符串类_运算符重载
- 重载_,“+, -, --, ++”运算符
- 作业11: 类_运算符重载
- c++_类的运算符重载
- C++_运算符重载
- C++_运算符重载
- C++_运算符重载
- C++_运算符重载
- C++_运算符重载
- C++_运算符重载
- C++_运算符重载
- C++_运算符重载
- C++_运算符重载
- C++_运算符重载
- C++_运算符重载
- C++_运算符重载
- C++_运算符重载
- C++_运算符重载
- 酷炫的几款下拉刷新框架之Phoenix Pull-To-Refresh
- springmvc简介
- 深入理解Android中Handler机制
- VFS之inode
- JSP+Servlet培训班作业管理系统[17] -完结篇之功能点介绍
- 字符串类_运算符重载
- 51 NOD 1239 欧拉函数之和(杜教筛)
- 类初始化顺序备忘
- 信用卡校验
- VFS之file描述
- 筋斗云接口编程 / 对象型接口(三)
- Gson存在的问题(更准确地说是它不同的做法)
- 详解shell语法检查模式
- leetcode---Super Ugly Number