zoukankan      html  css  js  c++  java
  • [C++] String类的复制控制的实现

    #include <iostream>
    #include <cstring>
    using namespace std;
    
    class String { // 一切都是深拷贝!
    private :
    	char *m_data;
    public :
    	String(const char *str = NULL);
    	String(const String&);
    	String& operator =(const String& rhs);
    	~String();
    	void show() {
    		cout << m_data << endl;
    	}
    };
    String::String(const char *str) { // 记住这里你是不能写 m_data = str, 不用犯这种想当然的错误!
    	if(str == NULL) {
    		m_data = new char[1];
    		m_data[0] = '\0';
    	}
    	else {
    		int len = strlen(str);
    		m_data = new char[len+1];
    		strcpy(m_data, str);
    	}
    }
    String::String(const String& rhs) {
    	if(rhs.m_data == NULL) {
    		m_data = new char[1];
    		m_data[0] = '\0';
    	}
    	else {
    		int len = static_cast<int> (strlen(rhs.m_data));
    		m_data = new char[len+1];
    		strcpy(m_data, rhs.m_data);
    	}
    }
    String& String::operator =(const String& rhs) {
    	if(this == &rhs) return *this; // *别落下!*
    	delete []m_data;  // *一定要先释放以前的!*
    	if(rhs.m_data == NULL) {
    		m_data = new char[1];
    		m_data[0] = '\0';
    	}
    	else {
    		int len = static_cast<int> (strlen(rhs.m_data));
    		m_data = new char[len+1];
    		strcpy(m_data, rhs.m_data);
    	}
    	return *this;
    }
    String::~String() {
    	delete []m_data;
    }
    int main() {
    	String s("hello");
    	String s1("hi");
    	s = s1;
    	s.show();
    	return 0;
    }
    

  • 相关阅读:
    git clone 解决Permission Denied (publickey)问题
    json-server 的基本使用
    存储过程的基本使用(1)
    Linux中的yum是什么?如何配置?如何使用?
    搭建博客园皮肤
    PSCP和SCP区别和用法
    Linux 磁盘分区和挂载
    win10产生文件的哈希值
    linux下刻录iso到U盘
    jquery鼠标移入移出
  • 原文地址:https://www.cnblogs.com/robbychan/p/3786688.html
Copyright © 2011-2022 走看看