c++string类的操作符重载

原创 2017年01月11日 15:27:23

首先 先了解  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;
	}
}



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





版权声明:本文为博主原创文章,未经博主允许不得转载。

string类中“+”操作符重载(三种形式)

class MyString { public: MyString(char *s)                      //有参构造函数; { str=new char[strl...
  • Lily_whl
  • Lily_whl
  • 2017年03月29日 20:53
  • 264

【C++】String类中的运算符重载

模块化设计: 头文件: #ifndef operator_operator_h #define operator_operator_h #include #include ...
  • Irean_Lau
  • Irean_Lau
  • 2015年06月07日 14:29
  • 6127

string替换所有指定字符串(C++)

C++的string提供了replace方法来实现字符串的替换,但是对于将字符串中某个字符串全部替换这个功能,string并没有实现,我们今天来做的就是这件事。 首先明白一个概念,即string替换所...
  • chinawangfei
  • chinawangfei
  • 2015年01月25日 18:51
  • 4990

字符串处理总结之三(C++string类)

在介绍完C#字符串处理方法之后,接下来介绍一下C++的字符串处理方法。C++的字符串处理方法没有C#的方便,它没有提供很多想C#那样实用的函数。在标准库中存在的string类型和传统的C字符串相比提供...
  • lsgqjh
  • lsgqjh
  • 2015年03月13日 12:24
  • 1107

C++ string的用法和例子

string是C++标准库的一个重要的部分,主要用于字符串处理。可以使用输入输出流方式直接进行操作,也可以通过文件等手段进行操作。同时C++的算法库对string也有着很好的支持,而且string还和...
  • tengfei461807914
  • tengfei461807914
  • 2016年08月24日 15:31
  • 30575

c++中string 的replace用法

/*用法一: *用str替换指定字符串从起始位置pos开始长度为len的字符 *string& replace (size_t pos, size_t len, const s...
  • yinhe888675
  • yinhe888675
  • 2016年03月18日 10:07
  • 10124

C++ STL replace()函数常用用法详解

replace算法:                 replace函数包含于头文件#include中。               泛型算法replace把队列中与给定值相等的所有值替换为另一个...
  • zwj1452267376
  • zwj1452267376
  • 2015年07月09日 20:49
  • 10068

C++ string.replace的使用

//下面是一个检查一个字符串中是否有'.'的函数,该函数将找到的'.'转化为'_'。 inline void checkName(string& name) { std::string::siz...
  • lincyang
  • lincyang
  • 2011年01月12日 16:35
  • 11952

【C++】复数的运算符重载

运算符重载的定义: 用户对于自定义类型的运算操作,例如复数的运算。需要重新定义运算符号(创建函数)。         除了类属关系运算符"."、成员指针运算符".*"、作用域运算符"::"、siz...
  • Irean_Lau
  • Irean_Lau
  • 2015年06月07日 00:58
  • 1808

C++--String类型各种重载函数的实现

#include #include #include #include using namespace std; class String { friend bool ...
  • bao2516090
  • bao2516090
  • 2015年07月30日 17:24
  • 4502
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c++string类的操作符重载
举报原因:
原因补充:

(最多只允许输入30个字)