c++ string类实现
2016-08-11 21:17
204 查看
http://blog.csdn.net/kennyrose/article/details/7486389
在C++中,对于一个空的类,编译器一般默认它会有4个成员函数:构造函数,析构函数,复制构造函数和赋值函数
[cpp] view
plain copy
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
class CMyString
{
friend std::ostream& operator<<( std::ostream& os, const CMyString& str);
private:
char* m_pData; // 私有变量保存字符串
public:
CMyString( const char* str = NULL ); // 构造函数
CMyString( const CMyString& str ); // 拷贝构造函数
~CMyString( void ); // 析构函数
CMyString& operator=( const CMyString& str ); // 赋值运算符
CMyString operator+( const CMyString& str ); // 字符串连接
bool operator==( const CMyString& str ); // 判断相等
char operator[]( int idx ); // 数组索引
int getLength(); // 返回长度
};
CMyString::CMyString( const char* str )
{
if ( !str )
{
this->m_pData = 0;
}
else
{
this->m_pData = new char[ strlen( str ) + 1 ];
strcpy( this->m_pData, str );
}
}
CMyString::CMyString( const CMyString& str )
{
if ( !str.m_pData )
{
this->m_pData = 0;
}
else
{
this->m_pData = new char[ strlen( str.m_pData ) + 1 ];
strcpy( this->m_pData, str.m_pData );
}
}
CMyString::~CMyString( void )
{
if ( this->m_pData)
{
delete[] this->m_pData;
this->m_pData = 0;
}
}
CMyString& CMyString::operator=( const CMyString& str)
{
if ( this != &str )
{
delete[] this->m_pData;
if ( !str.m_pData )
{
this->m_pData = 0;
}
else
{
this->m_pData = new char[ strlen( str.m_pData ) + 1 ];
strcpy( this->m_pData, str.m_pData );
}
}
return *this;
}
CMyString CMyString::operator+( const CMyString& str )
{
CMyString newString;
if ( !str.m_pData )
{
newString = *this;
}
else if ( !this->m_pData )
{
newString = str;
}
else
{
newString.m_pData = new char[ strlen( this->m_pData ) + strlen( str.m_pData ) + 1 ];
strcpy( newString.m_pData, this->m_pData );
strcat( newString.m_pData, str.m_pData );
}
return newString;
}
bool CMyString::operator==( const CMyString& str )
{
if ( strlen(this->m_pData) != strlen( str.m_pData ) )
{
return false;
}
else
{
return strcmp( this->m_pData, str.m_pData ) ? false : true;
}
}
//实现了[]函数,调用[] return array element
char CMyString::operator[]( int idx)
{
if ( idx > 0 && idx < strlen( this->m_pData ) )
return this->m_pData[idx];
}
int CMyString::getLength()
{
return strlen(this->m_pData);
}
std::ostream& operator<<( std::ostream& os, const CMyString& str )
{
os<< str.m_pData;
return os;
}
int main()
{
CMyString str1("i love ");
CMyString str2("u baby");
std::cout << "str1: " << str1 << std::endl;
std::cout << "str2: " << str2 << std::endl;
CMyString str3 = str1 + str2;
std::cout << "str3: " << str3 << std::endl;
CMyString str4 = str2;
str1 = str2;
std::cout << "str4: " << str4 << std::endl;
std::cout << "str1: " << str1 << std::endl;
std::cout << "str3 length: " << str3.getLength() << std::endl;
std::cout << "str3[3]= " << str3[3] << std::endl;
std::cout << ( str1 == str3 ) << std::endl;
return 0;
}
![](http://static.blog.csdn.net/images/save_snippets.png)
[cpp] view
plain copy
[cpp] view
plain copy
// main output
[cpp] view
plain copy
str1: i love
str2: u baby
str3: i love u baby
str4: u baby
str1: u baby
str3 length: 13
str3[3]= o
0
在C++中,对于一个空的类,编译器一般默认它会有4个成员函数:构造函数,析构函数,复制构造函数和赋值函数
[cpp] view
plain copy
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
class CMyString
{
friend std::ostream& operator<<( std::ostream& os, const CMyString& str);
private:
char* m_pData; // 私有变量保存字符串
public:
CMyString( const char* str = NULL ); // 构造函数
CMyString( const CMyString& str ); // 拷贝构造函数
~CMyString( void ); // 析构函数
CMyString& operator=( const CMyString& str ); // 赋值运算符
CMyString operator+( const CMyString& str ); // 字符串连接
bool operator==( const CMyString& str ); // 判断相等
char operator[]( int idx ); // 数组索引
int getLength(); // 返回长度
};
CMyString::CMyString( const char* str )
{
if ( !str )
{
this->m_pData = 0;
}
else
{
this->m_pData = new char[ strlen( str ) + 1 ];
strcpy( this->m_pData, str );
}
}
CMyString::CMyString( const CMyString& str )
{
if ( !str.m_pData )
{
this->m_pData = 0;
}
else
{
this->m_pData = new char[ strlen( str.m_pData ) + 1 ];
strcpy( this->m_pData, str.m_pData );
}
}
CMyString::~CMyString( void )
{
if ( this->m_pData)
{
delete[] this->m_pData;
this->m_pData = 0;
}
}
CMyString& CMyString::operator=( const CMyString& str)
{
if ( this != &str )
{
delete[] this->m_pData;
if ( !str.m_pData )
{
this->m_pData = 0;
}
else
{
this->m_pData = new char[ strlen( str.m_pData ) + 1 ];
strcpy( this->m_pData, str.m_pData );
}
}
return *this;
}
CMyString CMyString::operator+( const CMyString& str )
{
CMyString newString;
if ( !str.m_pData )
{
newString = *this;
}
else if ( !this->m_pData )
{
newString = str;
}
else
{
newString.m_pData = new char[ strlen( this->m_pData ) + strlen( str.m_pData ) + 1 ];
strcpy( newString.m_pData, this->m_pData );
strcat( newString.m_pData, str.m_pData );
}
return newString;
}
bool CMyString::operator==( const CMyString& str )
{
if ( strlen(this->m_pData) != strlen( str.m_pData ) )
{
return false;
}
else
{
return strcmp( this->m_pData, str.m_pData ) ? false : true;
}
}
//实现了[]函数,调用[] return array element
char CMyString::operator[]( int idx)
{
if ( idx > 0 && idx < strlen( this->m_pData ) )
return this->m_pData[idx];
}
int CMyString::getLength()
{
return strlen(this->m_pData);
}
std::ostream& operator<<( std::ostream& os, const CMyString& str )
{
os<< str.m_pData;
return os;
}
int main()
{
CMyString str1("i love ");
CMyString str2("u baby");
std::cout << "str1: " << str1 << std::endl;
std::cout << "str2: " << str2 << std::endl;
CMyString str3 = str1 + str2;
std::cout << "str3: " << str3 << std::endl;
CMyString str4 = str2;
str1 = str2;
std::cout << "str4: " << str4 << std::endl;
std::cout << "str1: " << str1 << std::endl;
std::cout << "str3 length: " << str3.getLength() << std::endl;
std::cout << "str3[3]= " << str3[3] << std::endl;
std::cout << ( str1 == str3 ) << std::endl;
return 0;
}
![](http://static.blog.csdn.net/images/save_snippets.png)
[cpp] view
plain copy
[cpp] view
plain copy
// main output
[cpp] view
plain copy
str1: i love
str2: u baby
str3: i love u baby
str4: u baby
str1: u baby
str3 length: 13
str3[3]= o
0
c++ string类实现
相关文章推荐
- c++ string类实现
- C++ String类的实现
- C++ string类的简单实现
- C++ string类实现
- C++ string类的实现
- C++ String类的简单实现1
- c++ string类实现(实现了引用计数)
- 实现C++ String类
- C++ string类的实现
- 一个C++ String类的简单实现
- C++ String类的实现
- C++ string类字符串的常用操作及实现
- C++ string类的隐式共享写时拷贝的实现及设计要点
- C++ string类的实现
- C++ String类的实现
- C++ String类的实现
- C++ String类四个基本函数的实现
- C++ String类 实现
- C++ string类的简单实现
- Tricks(三十七)—— C++ string类 split 的实现