侯捷C++面向对象高级开发(上)7.三大函数:拷贝构造,拷贝复制,析构

String.h

#ifndef __MYSTRING__
#define __MYSTRING__

//1.
class String {//class with pointer members 必须有 copy Constructor【拷贝构造】 copy assignment operator【拷贝赋值】
private:
    char* m_data;

public:
    String(const char* cstr = 0);
    String(const String& str);//拷贝构造
    String& operator=(const String& str);//拷贝赋值
    ~String();
    char* get_c_str() const { return m_data; }//inline function
};

//2-1
inline
String::String(const char* cstr = 0) {
    if (cstr) {
        m_data = new char[strlen(cstr) + 1];
        strcpy(m_data, cstr);
    }
    else {//未定义初值
        m_data = new char[1];
        *m_data = '\0';
    }
}

inline 
String::~String() {
    delete[] m_data;
}

//2-2
inline
String::String(const String& str) {  //copy Constructor【拷贝构造】
    m_data = new char[strlen(str.m_data) + 1];
    strcpy(m_data, str.m_data);
}

//2-3
inline
String& String::operator=(const String& str) {  //copy assignment operator【拷贝赋值]
    if (this == &str) {//检测自我赋值【self assignment】
        return *this;
    }
    delete[] m_data;
    m_data = new char[ strlen(str.m_data) + 1];
    strcpy(m_data, str.m_data);
    return *this;
}

//2-4
#include <iostream>
ostream& operator << (ostream& os, const String& str) {
    os << str.get_c_str();
    return os;
}


#endif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值