#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. Confluence 6 升级以后

    7. 拷贝你的数据库驱动 如果你现在使用的是 Oracle 或者 MySQL 数据库的话,你讲要重新拷贝 jdbc 驱动的 jar 文件到你已经存在的 Confluence 安装目录中 conflue ...

  2. es安装ik后报错无法启动 read write

    https://elasticsearch.cn/question/877 elasticsearch所在路径文件夹名称中带空格,路径错误

  3. ECharts前端图形展示

    这次负责慢查询预警,前后端都是自己处理,这次遇到了前端作图的需求,做一个记录以便后续使用: 使用的作图方式是ECharts,相应的example官方有相应的文档和使用方法,比较简单,一下只贴链接: h ...

  4. 【记录】【3】设置bing为chrome的默认搜索引擎

    方法:设置→搜索→管理搜索引擎→其他搜索引擎→设置bing搜索的网址为  http://cn.bing.com/search?q=%s 注:search?q=%s   是必须的,否则无法将其设置为默认 ...

  5. 美团2017年CodeM大赛-初赛B轮-黑白树

    https://ac.nowcoder.com/acm/problem/13249 链接:https://ac.nowcoder.com/acm/problem/13249来源:牛客网 题目描述 一棵 ...

  6. python django连接错误

    提示: connection.alias,django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0 ...

  7. idea函数被调用

    打开一个复杂的程序或者项目进行分析的时候,我们就需要知道一个方法在哪里被调用,用于迅速厘清代码逻辑.操作如下:选中函数,右键,点击Find Usages. 如图: 操作简单,但右键还是没有快捷键方便. ...

  8. 软工作业PSP与单元测试训练

    任务说明(二选一): 一.实现模块判断传入的身份证号码的正确性: 二.实现模块判断传入的电子邮箱账号的正确性: 选择任务二: 实现要求: 一.实现功能模块: 1. 判断邮箱地址是否为空: 2. 判断邮 ...

  9. Java Integer常量池——IntegerCache内部类

    个人理解,不喜勿喷,欢迎指正. 首先看下面这段代码,猜一下输出结果是什么 Integer a = 10; Integer b = 10; System.out.println(a == b); a = ...

  10. 实时输出topk最频繁变动的股价

    网上看到了一道关于bloomburg的面试题,follow 评论的思路 自己试着写了一个HashHeap的实现. 基本思路是维护一个大小为K的最小堆,里面是topK股价变动的公司ID(假设ID是Int ...