string类的实现:在VS2010和DEV4.9.9.2之间的差异
2012-03-04 00:00
246 查看
以下是string类的代码:
string.h代码如下:
#include<iostream>
using namespace std;
#ifndef STRING_H
#define STRING_H
//-------------------------------------------------------------------
class String
{
private:
char* m_pData;
public:
String(const char* pstr=NULL);
String(const String& obj);
String& operator=(const String& obj);
String& operator=(const char* pstr);
String& operator=(int nNum);
char& operator[](int nIdx);
const char& operator[](int nIdx)const;
String& operator[](const String& obj);
String& operator+=(const String& obj);
String& operator+=(const char* pstr);
int operator!=(const String&obj);
~String();
};
#endif
以下是主函数:
#include"string.h"
#include <cstdlib>
#include <iostream>
using namespace std;
int String::operator!=(const String&obj)
{
return strcmp(m_pData,obj.m_pData);
/*int j=0;
int i=0;
int m_pDataLength=strlen(m_pData);
int objLength=strlen(obj.m_pData);
if(m_pDataLength!=objLength)
{
cout<<"there are not equal"<<endl;
return 0;
}
else
{
for(i=0;i<m_pDataLength;i++,j++)
{
if(m_pData!=obj.m_pData)
break;
}
cout<<"there are equal"<<endl;
return 1;
}
*/
}
String::~String()
{
delete[]m_pData;
m_pData=NULL;
}
//-------------------------------------------------------------------
String& String::operator+=(const char* pstr)
{
if(pstr==NULL)
{
return *this;
}
char *pTmp = new char[strlen(m_pData) + strlen(pstr) + 1];
strcpy(pTmp, m_pData);
strcat(pTmp, pstr);
delete []m_pData;
m_pData = pTmp;
return *this;
}
//-------------------------------------------------------------------
String& String::operator+=(const String& obj)
{
if(obj.m_pData==NULL)
{
return *this;
}
char *pTmp = new char[strlen(m_pData) + strlen(obj.m_pData) + 1];
strcpy(pTmp, m_pData);
strcat(pTmp, obj.m_pData);
delete []m_pData;
m_pData = pTmp;
return *this;
}
//-------------------------------------------------------------------
String& String::operator[](const String& obj)
{
if (obj.m_pData == NULL)
{
return *this;
}
char *pTmp = new char[strlen(m_pData) + strlen(obj.m_pData) + 1];
strcpy(pTmp, m_pData);
strcat(pTmp, obj.m_pData);
delete []m_pData;
m_pData = pTmp;
return *this;
}
//-------------------------------------------------------------------
const char& String::operator[](int nIdx)const
{
return m_pData[nIdx];
}
//-------------------------------------------------------------------
char& String::operator[](int nIdx)
{
return m_pData[nIdx];
}
//-------------------------------------------------------------------
String& String::operator=(int nNum)
{
char szNum[24];
itoa(nNum, szNum, 10);
delete []m_pData;
m_pData = new char[strlen(szNum)+1];
strcpy(m_pData, szNum);
return *this;
}
//-------------------------------------------------------------------
String& String::operator=(const char* pstr)
{
if(pstr==m_pData)
{
return *this;
}
delete[] m_pData;
m_pData=new char[strlen(pstr)+1];
strcpy(m_pData,pstr);
return *this;
}
//-------------------------------------------------------------------
String& String::operator=(const String& obj)
{
if(&obj==this)
{
return *this;
}
delete[] m_pData;
m_pData=new char[strlen(obj.m_pData)+1];
strcpy(m_pData,obj.m_pData);
return *this;
}
//-------------------------------------------------------------------
String::String(const String& obj)
{
m_pData=new char[strlen(obj.m_pData)+1];
strcpy(m_pData,obj.m_pData);
};
//-------------------------------------------------------------------
String::String(const char* pstr/*=NULL*/)
{
if(NULL==pstr)
{
m_pData=new char[1];
*m_pData='\0';
}
else
{
m_pData=new char[strlen(pstr)+1];
strcpy(m_pData,pstr);
}
}
//-------------------------------------------------------------------------
int main( )
{
char arr[9]={'q','f','c','d','b','3','e','d','o'};
char* a=arr;
String str1(a);
String str2(arr);
if(str1!=str2)
cout<<"there are not equal"<<endl;
else
cout<<"there are equal"<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}
上述程序在DEVC++中可以编译运行,没有任何问题。
可在VC++2010中却有如下警告或错误:
string.h代码如下:
#include<iostream>
using namespace std;
#ifndef STRING_H
#define STRING_H
//-------------------------------------------------------------------
class String
{
private:
char* m_pData;
public:
String(const char* pstr=NULL);
String(const String& obj);
String& operator=(const String& obj);
String& operator=(const char* pstr);
String& operator=(int nNum);
char& operator[](int nIdx);
const char& operator[](int nIdx)const;
String& operator[](const String& obj);
String& operator+=(const String& obj);
String& operator+=(const char* pstr);
int operator!=(const String&obj);
~String();
};
#endif
以下是主函数:
#include"string.h"
#include <cstdlib>
#include <iostream>
using namespace std;
int String::operator!=(const String&obj)
{
return strcmp(m_pData,obj.m_pData);
/*int j=0;
int i=0;
int m_pDataLength=strlen(m_pData);
int objLength=strlen(obj.m_pData);
if(m_pDataLength!=objLength)
{
cout<<"there are not equal"<<endl;
return 0;
}
else
{
for(i=0;i<m_pDataLength;i++,j++)
{
if(m_pData!=obj.m_pData)
break;
}
cout<<"there are equal"<<endl;
return 1;
}
*/
}
String::~String()
{
delete[]m_pData;
m_pData=NULL;
}
//-------------------------------------------------------------------
String& String::operator+=(const char* pstr)
{
if(pstr==NULL)
{
return *this;
}
char *pTmp = new char[strlen(m_pData) + strlen(pstr) + 1];
strcpy(pTmp, m_pData);
strcat(pTmp, pstr);
delete []m_pData;
m_pData = pTmp;
return *this;
}
//-------------------------------------------------------------------
String& String::operator+=(const String& obj)
{
if(obj.m_pData==NULL)
{
return *this;
}
char *pTmp = new char[strlen(m_pData) + strlen(obj.m_pData) + 1];
strcpy(pTmp, m_pData);
strcat(pTmp, obj.m_pData);
delete []m_pData;
m_pData = pTmp;
return *this;
}
//-------------------------------------------------------------------
String& String::operator[](const String& obj)
{
if (obj.m_pData == NULL)
{
return *this;
}
char *pTmp = new char[strlen(m_pData) + strlen(obj.m_pData) + 1];
strcpy(pTmp, m_pData);
strcat(pTmp, obj.m_pData);
delete []m_pData;
m_pData = pTmp;
return *this;
}
//-------------------------------------------------------------------
const char& String::operator[](int nIdx)const
{
return m_pData[nIdx];
}
//-------------------------------------------------------------------
char& String::operator[](int nIdx)
{
return m_pData[nIdx];
}
//-------------------------------------------------------------------
String& String::operator=(int nNum)
{
char szNum[24];
itoa(nNum, szNum, 10);
delete []m_pData;
m_pData = new char[strlen(szNum)+1];
strcpy(m_pData, szNum);
return *this;
}
//-------------------------------------------------------------------
String& String::operator=(const char* pstr)
{
if(pstr==m_pData)
{
return *this;
}
delete[] m_pData;
m_pData=new char[strlen(pstr)+1];
strcpy(m_pData,pstr);
return *this;
}
//-------------------------------------------------------------------
String& String::operator=(const String& obj)
{
if(&obj==this)
{
return *this;
}
delete[] m_pData;
m_pData=new char[strlen(obj.m_pData)+1];
strcpy(m_pData,obj.m_pData);
return *this;
}
//-------------------------------------------------------------------
String::String(const String& obj)
{
m_pData=new char[strlen(obj.m_pData)+1];
strcpy(m_pData,obj.m_pData);
};
//-------------------------------------------------------------------
String::String(const char* pstr/*=NULL*/)
{
if(NULL==pstr)
{
m_pData=new char[1];
*m_pData='\0';
}
else
{
m_pData=new char[strlen(pstr)+1];
strcpy(m_pData,pstr);
}
}
//-------------------------------------------------------------------------
int main( )
{
char arr[9]={'q','f','c','d','b','3','e','d','o'};
char* a=arr;
String str1(a);
String str2(arr);
if(str1!=str2)
cout<<"there are not equal"<<endl;
else
cout<<"there are equal"<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}
上述程序在DEVC++中可以编译运行,没有任何问题。
可在VC++2010中却有如下警告或错误:
相关文章推荐
- string类的实现:在VS2010和DEV4.9.9.2之间的差异
- <监听器模式>在C++ 与 Java 之间实现的差异
- 1:总结并剖析malloc/free和new/delete之间关系和差异。 2:剖析new/delete、new[]/delete[]到底做了些什么事情。 3:实现NEW_ARRAY/DE
- <监听器模式>在C++ 与 Java 之间实现的差异
- <监听器模式>在C++ 与 Java 之间实现的差异
- 图解VS2010下实现C#,VB,C++之间的跨语言支持
- java 多线程实现方式Thread和Runnable之间差异
- 牛客网Java刷题知识点之HashMap的实现原理、HashMap的存储结构、HashMap在JDK1.6、JDK1.7、JDK1.8之间的差异以及带来的性能影响
- 使用vs2010的Coded UI Test实现数据驱动的用户自动登录测试
- DataTracker -- 窗体之间的联动, 观察者模式的另类实现
- js中for in与for of之间的差异
- Map接口与其实现类之间的关系
- js中for in与for of之间的差异
- Lsyncd搭建同步镜像-用Lsyncd实现本地和远程服务器之间实时同步
- WSS4J 1.5和1.6中实现WS Security的Merlin配置上的差异以及其它
- 使用反射+缓存+委托,实现一个不同对象之间同名同类型属性值的快速拷贝
- vuex 实现vue中多个组件之间数据同步以及数据共享。
- 实现虚拟Linux与Windows之间文件共享方法
- Extjs4 实现两个DataView之间元素的拖拽添加及删除
- 类与类之间的关系--泛化,关联,依赖,实现