关闭

设计String类,并且在String类中使用运算符重载

1519人阅读 评论(0) 收藏 举报
分类:

程序代码:

#include <iostream>
#include <Cstring>

using namespace std;

class String//定义String类
{
public:
    String( );//默认构造函数
    String(char *s);//构造函数
    String(String &str);//构造函数
    ~String();//析构函数
    void display( );//显示数据成员
    
    //重载>
   friend bool operator>(String &s1 , String &s2);
    
    //重载<
    friend bool operator<(String &s1 , String &s2);

    //重载==
    friend bool operator==(String &s1 , String &s2);
   
    //重载+
    friend String operator + (String &s1,String &s2 );
   
private:
    char *p;//字符指针
    int len;//字符串的长度
};

String::String()
{
    len = 0;
    p = NULL;
}

String::String(char *s)
{
    len = strlen(s);
    p = new char[len];
    strcpy(p,s);
}

String::String(String &str)
{
     len = str.len;
    p = new char[len];
    strcpy(p,str.p);
}

//析构函数
String::~String()
{
     if(!p)
    {
        delete(p);
    }
}

void String::display( )//输出p所指向的字符串
{
    cout<<p<<endl;
}

//重载>
bool operator>(String &s1 , String &s2)
{
    if(strcmp(s1.p , s2.p) > 0)
    {
        return true;
    }
    else
    {
        return false;
    }
}
    
//重载<
bool operator<(String &s1 , String &s2)
{
    if(strcmp(s1.p , s2.p) < 0)
    {
        return true;
    }
    else
    {
        return false;
    }
}

//重载==
bool operator==(String &s1 , String &s2)
{
    if(0 == strcmp(s1.p , s2.p))
    {
        return true;
    }
    else
    {
        return false;
    }
}


//重载+
String operator + (String &s1 , String &s2 )
{
    String s;
    s.len = s1.len+s2.len;
    s.p = new char(s.len+1);
    strcpy(s.p,s1.p);
    strcat(s.p,s2.p);
    return s;
}


void main( )
{
    String s1("Hello ");
    String s2("World");
    String s3;

    bool flag;

    cout<<"s1 = ";
    s1.display();

    cout<<"s2 = ";
    s2.display();

    //判断s1是否大于s2
    flag = s1 > s2;
    cout<<"s1 > s2 = "<<flag<<endl;

    //判断s1是否小于s2
    flag = s1 < s2;
    cout<<"s1 < s2 = "<<flag<<endl;

     //判断s1是否等于s2
    flag = s1 > s2;
    cout<<"s1 == s2 = "<<flag<<endl;

    //计算s1+s2
    s3 = s1 + s2;
    cout<<"s1 + s2 = ";
    s3.display();
    
  system("pause");
}


执行结果:


1
0
查看评论

C++--String类型各种重载函数的实现

#include #include #include #include using namespace std; class String { friend bool operator == (const String &,const String &...
  • bao2516090
  • bao2516090
  • 2015-07-30 17:24
  • 4513

【C++】String类中的运算符重载

模块化设计: 头文件: #ifndef operator_operator_h #define operator_operator_h #include #include using namespace std; class MyString { public: //...
  • Irean_Lau
  • Irean_Lau
  • 2015-06-07 14:29
  • 6132

string类中“+”操作符重载(三种形式)

class MyString { public: MyString(char *s)                      //有参构造函数; { str=new char...
  • Lily_whl
  • Lily_whl
  • 2017-03-29 20:53
  • 267

string类中运算符重载实现

C++中预定义的加、减等运算符的操作对象只能是基本的数据类型。如果要在用户自定义的类型对象上应用同样的运算符,就需要通过运算符重载来重新定义其实现,使它能够用于自定义类型执行特定的操作,所以运算符重载的基本要求是要跟应用在基本数据类型上的功能“”看起来“”是一致的。 运算符重载的实质是函数重载,其...
  • dcrmg
  • dcrmg
  • 2016-07-26 21:12
  • 1077

c++string类的操作符重载

首先 先了解  class 类里面给我们 默认重载了6个函数  分别是 默认构造 默认析够 默认赋值 拷贝构造 重载* 重载& 然而我们需要关注的是  拷贝构造         因为如果你不重写 拷贝构造的话...
  • w739639550
  • w739639550
  • 2017-01-11 15:27
  • 395

C++重载string类的+=运算符号

class MyString() { private: char *str; public: MyString(char *s) { str = new char(strlen(s)+1); strcpy(str,s); } ~MyString() { ...
  • qq_24038299
  • qq_24038299
  • 2016-11-17 21:01
  • 876

[c++]String字符串类的运算符重载

在c++中有一个新定义的类型string,可以不用那么麻烦的操作字符串,并且一些高级的运算符重载让她的使用更加便捷 下面是String类的定义和成员函数的定义: 再下面是测试程序:
  • cherry_ermao
  • cherry_ermao
  • 2015-06-07 12:40
  • 5251

[经典面试题][百度]c++实现STL中的string类

题目请用c++ 实现stl中的string类,实现构造,拷贝构造,析构,赋值,比较,字符串相加,获取长度及子串等功能。代码/*------------------------------------- * 日期:2015-03-31 * 作者:SJF0115 * 题目: 实现string...
  • SunnyYoona
  • SunnyYoona
  • 2015-03-31 22:41
  • 2312

设计String类,并且在String类中使用运算符重载

程序代码: #include #include using namespace std; class String//定义String类 { public: String( );//默认构造函数 String(char *s);//构造函数 String(Strin...
  • u010105970
  • u010105970
  • 2014-06-12 15:36
  • 1519

从零开始学C++之运算符重载(三):完善String类([]、 +、 += 运算符重载)、>>和<<运算符重载

在前面文章中使用过几次String类的例子,现在多重载几个运算符,更加完善一下,并且重载流类运算符。 []运算符重载 +运算符重载 +=运算符重载 >>运算符重载  C++ Code  1 2 3 4 5 6 7 8 9 10 11 12 13 1...
  • Simba888888
  • Simba888888
  • 2013-07-10 20:24
  • 4006
    个人资料
    • 访问:472487次
    • 积分:7545
    • 等级:
    • 排名:第3434名
    • 原创:286篇
    • 转载:19篇
    • 译文:0篇
    • 评论:149条
    博客专栏
    最新评论
    梅沙小子的微博