和C#不一樣,C和C++的內(nèi)部都沒有字符串數(shù)據(jù)類型,但是我們可以用C++建立一個實現(xiàn)字符串相關(guān)操作的類型:String
下面的程序分成兩個部分:
(1)String類:類頭String.h和類實現(xiàn)String.cpp
(2)String類使用演示程序Main.cpp
類頭文件String.h代碼如下:
#ifndef STRING_H
#define STRING_H
#include
using namespace std;
class String
{
friend ostream & operator<<(ostream & output, const String & s);
friend istream & operator>>(istream & input, String & s);
public:
String(const char* = "");
String(const String &);
~String();
const String & operator=(const String &); //賦值
String & operator+=(const String &); //字符串連接
int operator!() const; //String為空?
int operator==(const String &) const; //測試s1==s2
int operator!=(const String &) const; //測試s1!=s2
int operator<(const String &) const; //測試s1 int operator>(const String &) const; //測試s1>s2
int operator<=(const String &) const; //測試s1<=s2
int operator>=(const String &) const; //測試s1>=s2
char & operator[](int); //返回對字符的引用
String & operator()(int, int); //返回一個子字符串
int GetLength() const; //返回字符串的長度,不包括結(jié)尾的\0
private:
char* sPtr; //指向字符串起始位置的指針
int length; //字符串的長度
};
#endif
類實現(xiàn)文件String.cpp代碼如下:
#include
#include
#include
#include "String.h"
ostream & operator<<(ostream & output, const String & s)
{
output< return output;
}
istream & operator>>(istream & input, String & s)
{
static char temp[100];
input>>temp;
s = temp;
return input;
}
String::String(const char * s)
{
cout<<"Convention constructor:"< length = strlen(s);
sPtr = new char[length+1];
assert(sPtr!=0);
strcpy(sPtr, s);
}
String::String(const String & copy)
{
cout<<"Copy constructor:"< length = copy.length;
sPtr = new char[length+1];
assert(sPtr != 0);
strcpy(sPtr, copy.sPtr);
}
String::~String()
{
cout<<"Destructor:"< delete[] sPtr;
}
const String & String::operator=(const String & right)
{
cout<<"operator = called"<
下面的程序分成兩個部分:
(1)String類:類頭String.h和類實現(xiàn)String.cpp
(2)String類使用演示程序Main.cpp
類頭文件String.h代碼如下:
#ifndef STRING_H
#define STRING_H
#include
using namespace std;
class String
{
friend ostream & operator<<(ostream & output, const String & s);
friend istream & operator>>(istream & input, String & s);
public:
String(const char* = "");
String(const String &);
~String();
const String & operator=(const String &); //賦值
String & operator+=(const String &); //字符串連接
int operator!() const; //String為空?
int operator==(const String &) const; //測試s1==s2
int operator!=(const String &) const; //測試s1!=s2
int operator<(const String &) const; //測試s1
int operator<=(const String &) const; //測試s1<=s2
int operator>=(const String &) const; //測試s1>=s2
char & operator[](int); //返回對字符的引用
String & operator()(int, int); //返回一個子字符串
int GetLength() const; //返回字符串的長度,不包括結(jié)尾的\0
private:
char* sPtr; //指向字符串起始位置的指針
int length; //字符串的長度
};
#endif
類實現(xiàn)文件String.cpp代碼如下:
#include
#include
#include
#include "String.h"
ostream & operator<<(ostream & output, const String & s)
{
output<
}
istream & operator>>(istream & input, String & s)
{
static char temp[100];
input>>temp;
s = temp;
return input;
}
String::String(const char * s)
{
cout<<"Convention constructor:"<
sPtr = new char[length+1];
assert(sPtr!=0);
strcpy(sPtr, s);
}
String::String(const String & copy)
{
cout<<"Copy constructor:"<
sPtr = new char[length+1];
assert(sPtr != 0);
strcpy(sPtr, copy.sPtr);
}
String::~String()
{
cout<<"Destructor:"<
}
const String & String::operator=(const String & right)
{
cout<<"operator = called"<