首页 > 其他分享 >手撕代码,实现String类的构造函数、拷贝构造函数、赋值构造函数以及析构函数

手撕代码,实现String类的构造函数、拷贝构造函数、赋值构造函数以及析构函数

时间:2023-09-07 16:14:23浏览次数:40  
标签:String 代码 析构 拷贝 构造函数 赋值

#include <bits/stdc++.h>
using namespace std;

class String {
public:
    String(const char* str = NULL){// 普通构造函数
        cout << "普通构造函数被调用" << endl;
        if (str == NULL) {
            data = new char[1];
            *data = '\0';
        }
        else {
            int len = strlen(str);
            data = new char[len + 1];
            for (int i = 0;i < len;i++)
                data[i] = str[i];
            data[len] = '\0';
        }
    }

    String(const String &other) {// 拷贝构造函数
        cout << "拷贝构造函数被调用" << endl;
        int len = strlen(other.data);
        data = new char[len + 1];
        for (int i = 0;i < len;i++)
            data[i] = other.data[i];
        data[len] = '\0';
    }

    ~String() { //析构函数
        cout << "析构函数被调用" << endl;
        delete[]data; // 释放内存
        data = NULL;   // 置空指针
    }
    String& operator = (const String &other) { //赋值构造函数
        cout << "赋值构造函数被调用" << endl;
        if (this == &other) {
            return *this;
        }
        delete []data;
        int len = strlen(other.data);
        data = new char[len + 1];
        for (int i = 0;i < len;i++)
            data[i] = other.data[i];
        data[len] = '\0';
        return *this;
    }
    void show() {
        cout << data << endl;
    }
private:
    char* data;
};

int main()
{
    {
        String s("hello");
        s.show();
        String ss = String(s); //拷贝构造函数调用
        ss.show();
        String sss = s; //赋值
        sss.show();
    }
    system("pause");
    

    return 0;
}

 

标签:String,代码,析构,拷贝,构造函数,赋值
From: https://www.cnblogs.com/yzqiang/p/17685185.html

相关文章

  • java的List调用toString以后去除两端[]括号
    原始代码:List<Integer>vids=newArrayList<>();if(planList!=null&&planList.size()>0){for(inti=0;i<planList.size();i++){VoicePlanListEntityvoicePlanListEntity=newVoi......
  • (Java)String截取指定字符前面(后面)所有字符和String的常用方法
    1获取String的相关信息功能1)length():获取该字符串长度Stringstr="group-banner-top-";intlength=str.length();System.out.println(length);运行结果:172)charAt(intindex):获取指定索引处字符Stringstr="group-banner-top-";System.out.println(str.charAt(7)......
  • java中String和数组的长度
    数组的长度是lengthString的长度是length()在Java中,数组是引用数据类型,不是类,因此也是读取固有的length属性得到数组长度,它没有length()方法。但是,java中的String类型是jdk中已经封装好的final类,类就有属性和方法,只是String没有length属性,只有length()方法。......
  • 《Head First Java》学习笔记2--接口、构造函数与垃圾收集器
    接口:Java的接口就像是100%的纯抽象类接口的方法都带有public和abstract意义,这两个修饰符是属于选择性的完全不同的继承树的类可以实现相同的接口,使用接口就像是说“不管来自哪里,只要实现这个接口,别人就会知道你一定会履行这个合约”当用接口来作为多态......
  • D. Balanced String
    D.BalancedStringYouaregivenabinarystring$s$(abinarystringisastringconsistingofcharacters0and/or1).Let'scallabinarystringbalancedifthenumberofsubsequences01(thenumberofindices$i$and$j$suchthat$1\lei<j......
  • C++中虚继承时的构造函数
    在虚继承中,虚基类是由最终的派生类初始化的,换句话说,最终派生类的构造函数必须要调用虚基类的构造函数。对最终的派生类来说,虚基类是间接基类,而不是直接基类。这跟普通继承不同,在普通继承中,派生类构造函数中只能调用直接基类的构造函数,不能调用间接基类的。下面我们以菱形继承为例来......
  • 解决MASM32代码汇编出错: error A2181: initializer must be a string or single item
    最近用MASM32编程更新SysInfo,增加对IPv6连接信息的收集,使用到了typedefstruct_MIB_TCP6ROW_OWNER_MODULE{UCHARucLocalAddr[16];DWORDdwLocalScopeId;DWORDdwLocalPort;UCHARucRemoteAddr[16];DWORDdwRemoteScopeI......
  • 通过class字节码了解StringBuilder拼接字符串效率高的原因
    挺久没具体去看了,随手记一下吧。Stringstr="";for(inti=0;i<10;i++){str+=i;}这样的拼法,实际上从分析class的字节码来看,是在循环里面newStringBuffer对象,相当的耗。通过这样的分析,给新人解释,是最有效的了。还能提升一些了解java底层知识的兴趣。——《Java编程思......
  • string
    StringString全局对象是一个用于字符串或一个字符序列的构造函数。字符串字面量采取以下形式:'stringtext'"stringtext""中文/汉语""español""English""हिन्दी""العربية""português""বাংলা""русский&......
  • 【Azure Service Bus】使用Spring Cloud integration示例代码,为多个 Service Bus的连
    问题描述查看ServiceBus的Java示例代码,发现使用SpringCloudIntegration,配置Application.yaml可以连接到两个ServiceBus。但代码中没有使用ConnectionString属性配置服务连接。 那么,是否可以直接在此添加connection-string配置后,不用修改代码就可以连接到ServiceBus服务......