当前位置: 首页 > article >正文

c++中mystring运算符重载

#include <iostream>
#include <cstring>

using namespace std;

class mystring
{
    char* buf;
public:
    mystring(); //构造函数
    mystring(const char * str); //构造函数
    mystring(const mystring& str); //深拷贝函数
    void show(); //输出函数
    void setmystr(const mystring& str); //设置函数
    const char* getmystr() const; //获取函数
    void append(const mystring& str); //追加函数
    int isEqual(const mystring& str); // 比较函数
    void swap(mystring& str);//交换函数
    ~mystring(); //析构函数
/****************************************************************************/
    mystring& operator+(const mystring& str);//+
    mystring& operator=(const mystring& str);//=
    mystring& operator+=(const mystring& str);//+=
    bool operator==(const mystring& str);//==
    bool operator!=(const mystring& str);// !=
    mystring& operator++();//前++
    mystring operator++(int);//后++
    char operator[](const int index);//[]
    friend ostream& operator<<(ostream& out , const mystring& str);//cout << mystring
    friend istream& operator>>(istream& in , const mystring& str);//cin >> mystring
};

/****************************************************************************/
//+
mystring& mystring::operator+(const mystring& str)
{
    this->append(str);
    return *this;
}
//=
mystring& mystring::operator=(const mystring& str)
{
    int len = strlen(str.buf);
    buf = new char[len+1];
    strcpy(buf , str.buf);
    return *this;
}
//+=
mystring& mystring::operator+=(const mystring& str)
{
    this->append(str);
    return *this;
}
//==
bool mystring::operator==(const mystring& str)
{
    if (strcmp(this->buf , str.buf) == 0 )
        return true;
    else
        return false;
}
// !=
bool mystring::operator!=(const mystring &str)
{
    if(strcmp(buf , str.buf) == 0)
        return false;
    else
        return true;
}
//++
mystring& mystring::operator++()
{
    char * p = buf;
    while (*p != '\0') {
        ++(*p);
        p++;
    }
    return *this;
}
//后++
mystring mystring::operator++(int)
{
    mystring temp = *this;
    char * p = buf;
    while (*p != '\0') {
        ++(*p);
        p++;
    }
    return temp;
}
//[]
char mystring::operator[](const int index)
{
    int len = strlen(buf);
    if(index < len)
    {
        char * p = buf;
        return *(p+index);
    }
    return '\0';
}
//cout << mystring
ostream& operator<<(ostream& out , const mystring& str)
{
    out << str.buf;
    return out;
}
//cin >> mystring
istream& operator>>(istream& in , const mystring& str)
{
    in >> str.buf;
    return in;
}


/****************************************************************************/
//构造函数
mystring::mystring()
{
    buf = new char[1];
}
//构造函数
mystring::mystring(const char * str)
{
    int len = strlen(str);
    buf = new char[len+1];
    strcpy(buf , str);
}
//深拷贝函数
mystring::mystring(const mystring& str)
{
    int len = strlen(str.buf);
    buf = new char[len+1];
    strcpy(buf , str.buf);
}
//打印函数
void mystring::show()
{
    cout << buf << endl;
}
//设置函数
void mystring::setmystr(const mystring& str)
{
    free(this->buf);
    int len = strlen(str.buf);
    this->buf = new char[len+1];
    strcpy(this->buf , str.buf);
}
//获取函数
const char* mystring::getmystr() const
{
    return buf;
}
//追加函数
void mystring::append(const mystring& str)
{
    int len1 = strlen(this->buf);
    char* temp = new char[len1+1];
    memset(temp , 0 , len1+1);
    strcpy(temp , this->buf);
    delete[] buf;

    int len2 = strlen(str.buf);
    this->buf = new char[len1+len2+1];
    memset(buf , 0 , len1+len2+1);
    strcat(this->buf , temp);
    strcat(this->buf , str.buf);
}
//比较函数
int mystring::isEqual(const mystring& str)
{
    if(strcmp(buf , str.buf) > 0)
    {
        return 1;
    }
    else if(strcmp(buf , str.buf) < 0)
    {
        return -1;
    }
    else
        return 0;
}
//交换函数
void mystring::swap(mystring& str)
{
    char * temp = this->buf;
    this->buf = str.buf;
    str.buf = temp;
}
//析构函数
mystring::~mystring()
{
    delete[] buf;
}

int main()
{
    mystring ptr;
    mystring str = "hello world";
    str.show();
    ptr.setmystr("hello kitty");
    cout << ptr.getmystr() << endl;

    mystring qtr;
    qtr = ptr + str;
    qtr.show();

/*	ptr += str;
    ptr.show();  	*/

/*	if(ptr == str){}
    else{
        cout << "== success" << endl;
    } 				*/

/*	if(ptr != str)
    {
        cout << "!= success" << endl;
    }  				*/

/*	mystring temp = str++;
    temp.show();
    str.show(); 	*/

//	cout << str[0] <<  str[3] << str[8] << endl;

    mystring ttr;
    cout << "请输入:";
    cin >> ttr;
    cout << ttr;
    cout << endl;
    return 0;
}


http://www.kler.cn/a/409200.html

相关文章:

  • HBU算法设计与分析 贪心算法
  • #Uniapp篇:变量v-if 和 v-show 区别.sync 修饰符宽屏适配指南Pinia内置了
  • 无线图传下的低延迟视频传输播放技术探讨
  • 【人工智能】AutoML自动化机器学习模型构建与优化:使用Auto-sklearn与TPOT的实战指南
  • YOLOv11融合[NeurlS2022]递归门控卷积gnconv模块及相关改进思路
  • LDR6020驱动的Type-C接口显示器解决方案
  • 韩顺平 一周学会Linux | Linux 实操篇-实用指令
  • Python知识点精汇:集合篇精解!
  • 【大数据技术与开发实训】携程景点在线评论分析
  • HTMLCSS:翻书加载效果
  • 解!决!vscode!Path Intellisense 失效!不起作用问题!!
  • 机器学习实战笔记34-38:gridsearchcv的进阶使用,无监督学习:kmeans、DBSCAN
  • web网络安全系统
  • 深入浅出:大数据架构中的流处理与实时分析
  • 微服务系列概览
  • Momenta C++面试题及参考答案
  • Vue进阶面试题目(一)
  • vue3 + elementPlus 日期时间选择器禁用未来及过去时间
  • 【弱监督语义分割】Self-supervised Image-specific Prototype Exploration for WSSS 论文阅读
  • Leetcode 164.最大间距
  • c++视频图像处理
  • Linux连接网络的三种方式
  • 【JavaEE初阶 — 多线程】定时器的应用及模拟实现
  • 设计模式——拦截过滤器模式
  • ISAAC Gym 7. 使用箭头进行数据可视化
  • 伪数组和真数组