#include <iostream>
#include <string.h>
#include <stdlib.h> using namespace std; class myStrcmp
{
public:
//在声明处默认参数
myStrcmp(char *str=NULL);
//析构器
~myStrcmp()
{
cout<<"caibi"<<endl;
delete []str;
}
//运算符重载
int operator > (myStrcmp &str2);
int operator < (myStrcmp &str2);
int operator = (myStrcmp &str2);
private:
char *str; //成员函数str存放字符串
}; //构造器
myStrcmp::myStrcmp(char *str)
{
//如果没有值传进来,字符串置空
if(str==NULL)
{
this->str =new char[1];
*this->str='\0';
}
//如果有值传入,使用strcpy拷贝进对象的str中
else
{
this->str =new char[strlen(str)+1]; //申请空间
strcpy(this->str,str);
}
} //strcmp运算符重载与自实现
int myStrcmp::operator > (myStrcmp &str2)
{
//字符比较,不等退出
char *p=str2.str; //临时指针变量p,合理调用析构器析构str2
for(;*this->str == *p && *p!= '\0' && *this->str != '\0';(this->str)++,p++); //比较退出时第一个字符大小
if(*this->str > *p)
return 1;
} int myStrcmp::operator < (myStrcmp &str2)
{
//字符比较,不等退出
char *p=str2.str; //临时指针变量p
for(;*this->str == *p && *p != '\0' && *this->str != '\0';(this->str)++,p++); //比较退出时第一个字符大小
if(*this->str < *p)
return -1;
} int myStrcmp::operator = (myStrcmp &str2)
{ //字符比较,不等退出
char *p=str2.str; //临时指针变量p
for(;*this->str == *p && *p != '\0' && *this->str != '\0';(this->str)++,p++); //比较退出时第一个字符大小
if((*this->str) == (*p))
return 0;
} int main()
{
myStrcmp str1("panda"); //字符串s1
myStrcmp str2("panmsa"); //字符串s2 //判断str1与str2大小
if(str1>str2==1)
cout<<"str1>str2"<<endl;
else if(str1<str2==-1)
cout<<"str1<str2"<<endl;
else if((str1=str2)==0)
cout<<"str1=str2"<<endl; system("pause");
return 0;
}

  总结:析构器在析构时,若未定义str2的临时指针变量,str2会析构错误;不要改变指针位置,使用下标进行比较

#include <iostream>
#include <string.h>
#include <stdlib.h> using namespace std; class myStrcmp
{
public:
//在声明处默认参数
myStrcmp(char *str=NULL);
//析构器
~myStrcmp()
{
cout<<"caibi"<<endl;
delete []str;
}
//运算符重载
int operator > (myStrcmp &str2);
int operator < (myStrcmp &str2);
int operator = (myStrcmp &str2);
private:
char *str; //成员函数str存放字符串
}; //构造器
myStrcmp::myStrcmp(char *str)
{
//如果没有值传进来,字符串置空
if(str==NULL)
{
this->str =new char[1];
*this->str='\0';
}
//如果有值传入,使用strcpy拷贝进对象的str中
else
{
this->str =new char[strlen(str)+1]; //申请空间
strcpy(this->str,str);
}
} //strcmp运算符重载与自实现
int myStrcmp::operator > (myStrcmp &str2)
{
//字符比较,不等退出
int i=0;
for(;this->str[i] == str2.str[i] && str2.str[i]!= '\0' && this->str[i] != '\0';i++); //比较退出时第一个字符大小
if(this->str[i] > str2.str[i])
return 1;
} int myStrcmp::operator < (myStrcmp &str2)
{
//字符比较,不等退出
int i=0;
for(;this->str[i] == str2.str[i] && str2.str[i]!= '\0' && this->str[i] != '\0';i++); //比较退出时第一个字符大小
if(this->str[i] < str2.str[i])
return -1;
} int myStrcmp::operator = (myStrcmp &str2)
{ //字符比较,不等退出
int i=0;
for(;this->str[i] == str2.str[i] && str2.str[i]!= '\0' && this->str[i] != '\0';i++); //比较退出时第一个字符大小
if((this->str[i]) == (str2.str[i]))
return 0;
} int main()
{
myStrcmp str1("panda"); //字符串s1
myStrcmp str2("pandaa"); //字符串s2 //判断str1与str2大小
if(str1>str2==1)
cout<<"str1>str2"<<endl;
else if(str1<str2==-1)
cout<<"str1<str2"<<endl;
else if((str1=str2)==0)
cout<<"str1=str2"<<endl; system("pause");
return 0;
}

  

c++ — 运算符重载与strcmp自实现的更多相关文章

  1. C++程序设计方法3:数组下标运算符重载

    数组下标运算符重载 函数声明形式 返回类型operator[](参数): 如果返回类型是引用,则数组运算符调用可以出现在等式的左边,接受赋值,即: Obj[index] = value; 如果返回类型 ...

  2. 编码实现字符串类CNString实现运算符重载

    题目描述: 编码实现字符串类CNString,该类有默认构造函数.类的拷贝函数.类的析构函数及运算符重载,需实现以下"="运算符."+"运算."[]& ...

  3. String 类实现 以及>> <<流插入/流提取运算符重载

    简单版的String类,旨在说明>> <<重载 #include <iostream> //#include <cstring>//包含char*的字符 ...

  4. c++知识点总结--友元&运算符重载

    友元函数(不属于类) 可以访问类的私有变量,以及私有函数 友元函数在类内声明需要friend关键字,类外定义就不需要 友元函数可以直接在类内定义 友元函数必须包含对象指针   友元类(不适用继承,只适 ...

  5. C++编写字符串类CNString,该类有默认构造函数、类的拷贝函数、类的析构函数及运算符重载

    编码实现字符串类CNString,该类有默认构造函数.类的拷贝函数.类的析构函数及运算符重载,需实现以下“=”运算符.“+”运算.“[]”运算符.“<”运算符及“>”运算符及“==”运算符 ...

  6. string类中运算符重载实现

    C++中预定义的加.减等运算符的操作对象只能是基本的数据类型.如果要在用户自定义的类型对象上应用同样的运算符,就需要通过运算符重载来重新定义其实现,使它能够用于自定义类型执行特定的操作,所以运算符重载 ...

  7. 五、C++运算符重载,使面向对象编程更方便

    复数类CComplex 编译器做对象运算的时候,会调用对象的运算符重载函数(优先调用成员方法):如果没有成员方法,就砸全局作用域找合适的运算符重载函数 ++和--运算符是单目运算符,在参数列表里放上一 ...

  8. 深入C++05:运算符重载

    运算符重载 1.复数类 运算符重载目的:使对象运算表现得和编译器内置类型一样: 复数类例子 #include<iostream> using namespace std; class CC ...

  9. C++ 运算符重载时,将运算符两边对象交换问题.

    在C++进行运算符重载时, 一般来讲,运算符两边的对象的顺序是不能交换的. 比如下面的例子: #include <iostream> using namespace std; class ...

随机推荐

  1. 【网址】PHP参考文档

    在线阅读:http://php.net/docs.php 离线下载:http://php.net/download-docs.php

  2. 跟我一步一步写出MongoDB Web 可视化工具(二)

    前言 上篇讲了一些基础,主要注重的是查,包括建立数据库链接.获取数据库.获取表.列出数据库.列出表.列出索引.获取数据等. 本篇依然是基础,注重增改删,废话不多说,咱们开始. 进阶 创建一个数据库和一 ...

  3. 数据结构与算法之PHP递归函数

    一.递归函数的定义 递归函数即自调用函数,在函数体内部直接或者间接的自己调用自己,即函数的嵌套调用是函数本身. 通常在此类型的函数题中会附加一个条件判断叙述,以判断是否需要执行递归调用,并且在特定的条 ...

  4. sql server error 53

    主要是计算机名修改了,通过服务器名称,浏览更多,选择“数据库引擎”里面的第一个,就可以登陆了

  5. linux 下的read write 和fread fwrite

    待进一步测试啊,先占坑 --------2017/7/17 忘记之前要写什么了,只记得当时测试完得出的结论是,无论是写设备还是写文件,都用read/write是既安全又省事情的举动.还熟悉. 尽多少力 ...

  6. Windows编译安装使用cephfs客户端

    本文介绍如何将cephfs映射到windows的一个盘上,以磁盘映射的方式访问cephfs. 1.下载必要安装包 tdm-gcc:(安装时选32位)https://sourceforge.net/pr ...

  7. TCP三次握手的思考?

    大家都知道TCP有三次握手的过程,今天我就仔细想了想为什么TCP要有三次握手 先贴一张三次握手的示意图,说明一点是在三次握手中A是在第二次握手后申请缓存资源,B是在第一次握手后申请. 其实这个问题就是 ...

  8. PHP7.X连接SQLSERVER数据库(CENTOS7)

    加入微软的源 curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssqlreleas ...

  9. 棋牌平台开发教程之扎金花大小比较算法在php中的实现

    PHP中扎金花比大小如何实现 在棋牌游戏中,不管是现实的还是线上的,扎金花无疑是最热门棋牌游戏之一,鄙人从小就酷爱扎金花,机缘巧合后面从事了IT行业,话不多说,直接进去正题吧. 扎金花两副牌的比较规则 ...

  10. CentOS 7安装部署ELK 6.2.4-SUCCESS

    一.ELK介绍 ELK是三款开源软件的缩写,即:ElasticSearch + Logstash + Kibana.这三个工具组合形成了一套实用.易用的监控架构,可抓取系统日志.apache日志.ng ...