Color的博客

每一个你不满意的现在,都有一个你没有努力的曾经。

c++string类的操作符重载

首先 先了解  class 类里面给我们 默认重载了6个函数  分别是

默认构造

默认析够

默认赋值

拷贝构造

重载*

重载&

然而我们需要关注的是  拷贝构造         因为如果你不重写 拷贝构造的话 里面的 数据全部都是浅拷贝   当 自己的俩个string 相等的时候  就会出问题  它里面的char只想同一个空间    所以 这里自己重载了拷贝构造  避免 一些莫名奇妙的崩溃 。。。。  

.h文件    

#ifndef _STRING_H_
#define _STRING_H_
#define  _CRT_SECURE_NO_WARNINGS
#include <iostream>
namespace CR
{
	class String
	{
	public:
		String(const char *str = "");	//拷贝构造
		String(const String& other);    //赋值构造
		String& operator=(const String& other); //重载=
		String& operator+=(const String& other);
		String  operator+(const String& other);
		char& operator[](const int index);
		friend std::ostream& operator<<(std::ostream & os, const String& me);
		friend std::istream& operator>>(std::istream & is, const String& me);
		friend String operator+(const char* data ,const String& other);

		//重载 *
		//重载 &
		~String();//析够函数
	private:
		char *data_;
		char *Alloc(const char* data);
	};
}



#endif//_STRING_H_



.cpp文件

#include "String.h"

#include <cstring>

namespace CR
{

	String::String(const char *str)
	{
		data_ =Alloc(str);
	}

	String::~String()
	{
		delete[]data_;
	}

	String::String(const String& other)
	{
		data_ = Alloc(other.data_);
	}
	char* String::Alloc(const char* data)
	{
		int len = strlen(data) + sizeof(char);
		char* newData = new char[len];
		strcpy(newData, data);
		return newData;
	}
	String& String::operator = (const String& other)
	{
		delete[]data_;
		data_ = Alloc(other.data_);
		return *this;
	}

	String& String::operator+=(const String& other)
	{
		int len = strlen(data_) + strlen(other.data_) + sizeof(char);
		char *pdata = new char[len];
		memset(pdata, 0, len);
		strcat(pdata, data_);
		strcat(pdata, other.data_);
		delete[]data_;
		data_ = pdata;
		return *this;
	}

	char& String::operator[](const int index)
	{
		return data_[index];
	}

	String String::operator+(const String& other)
	{
		String temp = *this;
		temp += other;
		return temp;
	}
	std::ostream& operator<<(std::ostream & os, const String& me)
	{
		os << me.data_;
		return os;
	}
	std::istream& operator>>(std::istream & is, const String& me)
	{
		is >> me.data_;
		return is;
	}
	String operator+(const char* data, const String& other)
	{
		String temp(data);
		temp += other;
		return temp;
	}
}



如果 本程序 有问题 或者有更好的实现方法  欢迎切磋    和吐槽   





阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/w739639550/article/details/54343758
个人分类: c++ class
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

c++string类的操作符重载

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭