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;
    }
    

  • 相关阅读:
    CCF 认证
    ZOJ Light Bulb
    codeforce 605BE. Freelancer's Dreams
    HDU2546——背包DP——饭卡
    转载DD大神背包九讲
    背包九讲
    zstu4186——线段树——表白计划(未完成)
    zstu4189——后缀表达式——逻辑运算
    蛇形矩阵
    zs深入浅出学算法022——DFS———汉诺塔问题II
  • 原文地址:https://www.cnblogs.com/robbychan/p/3786688.html
Copyright © 2011-2022 走看看