C++ String类的简单实现1

本文详细介绍了C++中自定义String类的设计与实现过程,包括基本构造、析构、拷贝构造、赋值等核心成员函数的实现细节,并讨论了如何避免内存泄漏等问题。
一、String类的基本设计: 
 String类的最简单的设计是只含有一个char*成员变量。
<span style="white-space: pre;">	</span><pre name="code" class="cpp">        String(char * str = "")
		:_str(new char [sizeof(str) + 1]){
		strcpy(_str, str);
	}


 二、实现最基本的构造、析构、拷贝构造、赋值几种最基本成员函数:
  1、构造函数:<span style="font-family: Arial, Helvetica, sans-serif;">成员变量为私有的,要对其进行初始化,必须用一个共有成员函数来进行。同时这个函数应该有且仅有在定义对象时自动执行一次(构造函数不可以显示调用)</span>
   <pre name="code" class="cpp">	String(char * str = "")
		:_str(new char [sizeof(str) + 1]){
		strcpy(_str, str);
	}<span style="font-family: Arial, Helvetica, sans-serif;">   </span>
   2、析构函数:当一个对象生命周期结束时,C++编译系统会自动调用的一种成员函数。
<span style="white-space:pre">	</span><pre name="code" class="cpp">	~String(){
		if (_str != NULL){
			delete[] _str;
			_str = NULL;
		}
	}
3、拷贝构造函数:创建对象时使用同类对象来进行初始化,这是使用的构造函数成为拷贝构造函数;拷贝构造函数是特殊的构造函数。

<pre name="code" class="cpp">      传统写法:

<span style="white-space:pre"></span><pre name="code" class="cpp">	String(const String &str)                 
	:_str(new char[(sizeof(str._str) + 1)]){
		strcpy(_str, str._str);
	}
       经过改进之后的写法:<span style="font-family: Arial, Helvetica, sans-serif;">	</span>
<span style="white-space:pre"></span><pre name="code" class="cpp">        String(const String &str)
	:_str(NULL){
		String temp(str._str);
		swap(_str,temp._str);
	}
4、赋值函数:该函数属于预算福重载函数中的一类(operator=)

<span style="white-space:pre">	</span>传统写法:
<pre name="code" class="cpp"><span style="white-space:pre">	</span>String& operator=(const String& str){
        	if ( this != &str){
		delete[] _str;
		_str = new char[sizeof(str._str) + 1];
		strcpy(_str, str._str);
	      }
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>改进后的写法:<span style="font-family: Arial, Helvetica, sans-serif;">	</span>
<span style="white-space:pre"></span><pre name="code" class="cpp">	String& operator=(String str){
		swap(_str, str._str);
		return *this;
	}
     5、其他的几个常用的函数的实现:
<pre name="code" class="cpp">     <span>public</span>:

<span style="white-space:pre"></span><pre name="code" class="cpp">        bool operator==(const String & s){
		if (SameStr(_str,s._str))
			return true;
		else
			return false;
	}
	bool operator>(const String & s){
		if (Compare(_str, s._str))
			return true;
		else
			return false;
	}
	bool operator<(const String & s){
		return ((_str > s._str));
	}<span style="font-family: Arial, Helvetica, sans-serif;">	</span>
<span style="white-space:pre"></span><pre name="code" class="cpp">	bool SameStr(const char* s1, const char* s2){
		assert(s1);
		assert(s2);
		while ((*s1) == (*s2)){
			s1++;
			s2++;
			if ((*s1 == '\0') && (*s2 == '\0'))
				return  true;
		}		
	  return false;
	}
	bool Compare(const char *s1, const char *s2){
		assert(s1);
		assert(s2);
		int ret;
		while (*s1++ == *s2++)
	    ret = *s1 - *s2;
		if (ret > 0)
		    return true;
		else 
		   return false;
	}





三、总结:

     1、为了保证代码的一致性应该尽量是new type[](delete [])只出现在构造(析构)函数中,这样写方便以后对代码的维护工作。
     2、在写operator=()的传统写法时,一定要注意内存泄露的问题,并且需要对自幅值的处理。
     3、在写operator=()的改进写法时,应该注意在初始化列表中对_str的初始化,否则程序将会面临崩溃的危险。
     4、应该注意对库函数的使用。<span style="white-space:pre">		</span>





<span style="white-space:pre">	</span>


                
混合动力汽车(HEV)模型的Simscape模型(Matlab代码、Simulink仿真实现)内容概要:本文档介绍了一个混合动力汽车(HEV)的Simscape模型,该模型通过Matlab代码和Simulink仿真工具实现,旨在对混合动力汽车的动力系统进行建模与仿真分析。模型涵盖了发动机、电机、电池、传动系统等关键部件,能够模拟车辆在不同工况下的能量流动与控制策略,适用于动力系统设计、能耗优化及控制算法验证等研究方向。文档还提及该资源属于一个涵盖多个科研领域的MATLAB仿真资源包,涉及电力系统、机器学习、路径规划、信号处理等多个技术方向,配套提供网盘下载链接,便于用户获取完整资源。; 适合人群:具备Matlab/Simulink使用基础的高校研究生、科研人员及从事新能源汽车系统仿真的工程技术人员。; 使用场景及目标:①开展混合动力汽车能量管理策略的研究与仿真验证;②学习基于Simscape的物理系统建模方法;③作为教学案例用于车辆工程或自动化相关课程的实践环节;④与其他优化算法(如智能优化、强化学习)结合,实现控制策略的优化设计。; 阅读建议:建议使用者先熟悉Matlab/Simulink及Simscape基础操作,结合文档中的模型结构逐步理解各模块功能,可在此基础上修改参数或替换控制算法以满足具体研究需求,同时推荐访问提供的网盘链接获取完整代码与示例文件以便深入学习与调试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值