c++实现字符串的基本功能(派生类与继承)

c++实现字符串的基本功能(派生类与继承)

  1. 定义一个基类 BaseString,实现基本的输入字符串的功能。
  2. 定义一个类继承自 BaseString,实现字符串的倒置功能。
  3. 定义一个类继承自 BaseString,实现字符串的 copy 功能。
  4. 定义一个类继承自 BaseString,实现字符串的 compare 功能。
  5. 将基类 BaseString 的Disp()函数定义为虚函数,解决基类继承中产生的二义性问题
#include<iostream>
#include<string>
using namespace std;
class BaseString{//basestring
public:
    char* GetData();
    void Input();
    virtual void Disp();
    BaseString();
    unsigned Getlength(){
        return Length;
    }
protected:
    char Data[10];
    unsigned Length;//表示字符串的 长度,包括结束表示字符串的'\0'长度
};
BaseString::BaseString(){  //构造函数
    Data[0]='\0';
    Length=0;
}
char* BaseString::GetData(){  //返回字符数组
    return Data;
}
void BaseString::Input(){  //输入字符
    cout<<"请输入一个字符串";
    cin.getline(Data,10);
    for(Length=0;Data[Length]!='\0';Length++);
}
void BaseString::Disp(){  //输出字符串
    cout<<"该字符串为: "<<Data<<endl;
}

class ReString:public BaseString{//倒置
protected:
public:
    void Reverse()//初始化
    {
        char temp;
        int iMax=Length-1;
        for(int i=0;i<=iMax/2;i++)
            temp=Data[i],
            Data[i]=Data[iMax-i],
            Data[iMax-i]=temp;
    }
    void Disp(){
        cout<<"倒置字符串为:  "<<Data<<endl;
    }
};



class CopyString:public BaseString{//copy
public:
    void Copy(BaseString a)
    {
    char *temp=a.GetData();
    int i;
    for(i=0;i<a.Getlength();i++)
    Data[i]=temp[i];
    Data[i]='\0';
    Length=a.Getlength();
    }
};


class ComString:public BaseString{   //比较
public:
    int Com(BaseString bs)
{
    int i;
    for(i=0;Data[i]!='\0'&&bs.GetData()[i]!='\0'&&Data[i]==bs.GetData()[i];i++);
                //利用循环检测字符串字符是否相同
    if(Data[i]=='\0'&&bs.GetData()[i]!='\0') return -1; //第一个字符串短
    else if(Data[i]!='\0'&&bs.GetData()[i]=='\0') return 1;//第一个字符串长
    else if(Data[i]=='\0'&&bs.GetData()[i]=='\0') return 0;//相同
    else if(Data[i]>bs.GetData()[i]) return 1;//第一个大
    else return -1;//第二个大
}};


void main(){
    BaseString a;
    a.Input();
    cout<<"字符串长度为: ";
    cout<<a.Getlength()<<endl;
    a.Disp();
    ReString b;
    b.Input();
    b.Reverse();
    cout<<"字符串长度为: ";
    cout<<b.Getlength()<<endl;
    b.Disp();
    CopyString c;
    c.Copy(a);
    cout<<"复制后字符串: ";
    c.Disp();
    ComString d;
    d.Input();
    d.Com(a);
    cout<<"字符串长度为: ";
    cout<<d.Getlength()<<endl;
    c.Disp();cout<<"与第一个字符串比较结果为"<<d.Com(a)<<endl;
}
注意点:

 1. 在基类的派生类中,可以直接定义新的功能。并且能共继续使用基类的函数。
 2. 基类定义时,Getdata()的返回值一定要为字符串类型,要区分Getdata()与Disp()的区别。
 3. 比较类中,利用循环找到第一个不相同的字符,再进行分类讨论,输出结果。




  • 12
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值