C++面向对象编程题 第28题

28.建立一个类 String,连接两个字符串。

具体要求:

  1. 私有数据成员
  • int Length; //字符串的长度
  • char *s; //指向字符串的指针
  1. 公有成员
  • 构造函数 //缺省参数的构造函数、以对象作为参数构造函数、以一个字符串常量作为参数的构造函数
  • 析构函数
  • 拷贝构造函数
  • String operator +(String &); //重载“+”运算符
  • String operator =(String &); //重载“=”运算符
  • void show(); //输出两个字符串和结果字符
#include <iostream>
#include <cstring>
using namespace std;
class String{
    int len;
    char *s;
public:
    String(){
        s = 0;
        len = 0;
    }
    String(const char *s1){
        len = strlen(s1);
        s = new char[len + 1];
        strcpy(s, s1);
    }
    String(const String &str){
        len = str.len;
        if (str.s)
        {
            s = new char[len + 1];
            strcpy(s, str.s);
        }
        else
            s = 0;
    }
    String operator+(String &s1){
        String s2;
        s2.len = len + s1.len;
        s2.s = new char[s2.len + 1];
        strcpy(s2.s, s);
        strcat(s2.s, s1.s);
        return s2;
    }
    String operator=(const String &s1){ 
    //必须加上const,否则会报错
        if (s)
            delete[] s;
        len = s1.len;
        if (s1.s)
        {
            s = new char[len + 1];
            strcpy(s, s1.s);
        }
        else
            s = 0;
        return *this;
    }
    void show(){
        cout << s << endl;
    }
    ~String(){
        if(s)delete[]s;
            
    }
};
int main()
{
    String str1("hello"), str2("world"), str3;
    str3 = str1 + str2;
    str1.show();
    str2.show();
    str3.show();
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值