c++ — 运算符重载与strcmp自实现
#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自实现的更多相关文章
- C++程序设计方法3:数组下标运算符重载
数组下标运算符重载 函数声明形式 返回类型operator[](参数): 如果返回类型是引用,则数组运算符调用可以出现在等式的左边,接受赋值,即: Obj[index] = value; 如果返回类型 ...
- 编码实现字符串类CNString实现运算符重载
题目描述: 编码实现字符串类CNString,该类有默认构造函数.类的拷贝函数.类的析构函数及运算符重载,需实现以下"="运算符."+"运算."[]& ...
- String 类实现 以及>> <<流插入/流提取运算符重载
简单版的String类,旨在说明>> <<重载 #include <iostream> //#include <cstring>//包含char*的字符 ...
- c++知识点总结--友元&运算符重载
友元函数(不属于类) 可以访问类的私有变量,以及私有函数 友元函数在类内声明需要friend关键字,类外定义就不需要 友元函数可以直接在类内定义 友元函数必须包含对象指针 友元类(不适用继承,只适 ...
- C++编写字符串类CNString,该类有默认构造函数、类的拷贝函数、类的析构函数及运算符重载
编码实现字符串类CNString,该类有默认构造函数.类的拷贝函数.类的析构函数及运算符重载,需实现以下“=”运算符.“+”运算.“[]”运算符.“<”运算符及“>”运算符及“==”运算符 ...
- string类中运算符重载实现
C++中预定义的加.减等运算符的操作对象只能是基本的数据类型.如果要在用户自定义的类型对象上应用同样的运算符,就需要通过运算符重载来重新定义其实现,使它能够用于自定义类型执行特定的操作,所以运算符重载 ...
- 五、C++运算符重载,使面向对象编程更方便
复数类CComplex 编译器做对象运算的时候,会调用对象的运算符重载函数(优先调用成员方法):如果没有成员方法,就砸全局作用域找合适的运算符重载函数 ++和--运算符是单目运算符,在参数列表里放上一 ...
- 深入C++05:运算符重载
运算符重载 1.复数类 运算符重载目的:使对象运算表现得和编译器内置类型一样: 复数类例子 #include<iostream> using namespace std; class CC ...
- C++ 运算符重载时,将运算符两边对象交换问题.
在C++进行运算符重载时, 一般来讲,运算符两边的对象的顺序是不能交换的. 比如下面的例子: #include <iostream> using namespace std; class ...
随机推荐
- flutter -------- ListView的使用
学习了Flutter,来分享一下学习的一些常用的知识,先来说说ListView 案例效果: ListView是一个类似列的widget,它的内容对于其渲染框太长时会自动提供滚动. ListView 摘 ...
- servletsza
servlet本身不能独立运行,需要在一个web应用中运行,而web应用是部署在tomcat上的 所以一个servlet开发需要以下几个步骤: ①创建web应用项目 ②编写servlet代码 ③部署到 ...
- nodeJs安装Vue-cli
1,安装nodejs安装包,注意安装的路径 2,安装完成node,node有自带的npm,可以直接在cmd中,找到nodeJs安装的路径下,进行命令行全局安装vue-cli.(npm install ...
- vue-cli(vue脚手架) 简单使用
1.vue-cli 作用 vue-cli作为vue的脚手架,可以帮助我们在实际开发中自动生成vue.js的模板工程. 2.vue-cli 使用 a. 安装全局vue-cli npm install v ...
- Varnish http缓存服务器
http://blog.51cto.com/hexiaoshuai/1909183 https://jefferywang.gitbooks.io/varnish_4_1_doc_zh/content ...
- CentOS7+Win10双系统的CentOS7启动bug
自从安装了CentOS7系统,它的启动时间常常要三分钟以上,实在忍不了. 以下是CentOS7系统的启动记录片断: May 18 13:04:05 DESKTOP-23V3CHU kernel: XF ...
- implode() 数组元素组合函数
定义和用法 implode() 函数把数组元素组合为一个字符串. 语法:implode(separator,array); 说明 虽然 separator 参数是可选的.但是为了向后兼容,推荐您使用使 ...
- PhoneGap和Cordova应该用哪一个?
就目前来看,cordova是一个移动应用开发框架,你基于这个东西可以用网页代码作出APP.Phonegap Build是一个在线打包工具,你把使用cordova写好的项目给Phonegap Build ...
- 26. Remove Duplicates from Sorted Array★
题目内容: Given a sorted array, remove the duplicates in place such that each element appear only once a ...
- JAVA常用异常类
算数异常类: ArithmeticExecption 空指针异常类: NullPointerException 指定类不存在: ClassNotFoundException 字符串转换 ...