c++ string 函式的過載
阿新 • • 發佈:2019-02-20
用C++實現一個String類,它具有比較,連線,輸入,輸出功能,並且提供一些測試例項說明如何使用這個類。注意不要使用MFC,STL以及其他庫。
解析:
要實現這些功能,需要過載的運算子:
1 < >,==和 != 比較運算子。
2 +=連線運算子以及賦值運算子。
3 輸出,輸入運算子。
mystring.h 檔案
- #ifndef STRING_H
- #define STRING_H
- #include <ostream>
- #include <istream>
- usingnamespace std;
-
class mystring{
- public:
- mystring();//預設建構函式
- mystring(int n,char c);//普通建構函式
- mystring(constchar* source); //普通建構函式
- mystring(const mystring &s); //複製建構函式
- mystring& operator =(const mystring &s); //過載"="實現物件賦值
- mystring& operator =(constchar *s);//過載"="實現字串賦值
- ~mystring();//解構函式
-
char
- constchar & operator [](int i) const;//過載[],實現陣列運算(物件為常量)
- mystring & operator +=(const mystring & s);//過載+=,實現與物件相加
- mystring & operator +=(constchar *s);//過載+=,實現與字串相加
-
friend ostream& operator <<(ostream &out,mystring &s);
- friend istream& operator >>(istream &in,mystring &s);//過載>>,實現輸入流
- friendbool operator <(const mystring &left,const mystring &right);//過載<
- friendbool operator >(const mystring &left,const mystring &right);//過載>
- friendbool operator ==(const mystring &left,const mystring &right);//過載==
- friendbool operator !=(const mystring &left,const mystring &right);//過載!=
- constchar *getdata() const;//獲取data指標
- int getlength() const;//
- protected:
- private:
- int size;//data表示的字串長度
- char *data;//指向字串資料
- };
- #endif
mystring.cpp檔案
- // 運算子過載.cpp : 定義控制檯應用程式的入口點。
- //
- #include "stdafx.h"
- #include "mystring.h"
- #include <iostream>
- usingnamespace std;
- mystring::mystring(){
- data=newchar[1];//空字元只含有'\0'一個元素
- *data='\0';
- size=0;
- }
- mystring::mystring(int n, char c){
- data=newchar[n+1]; //含有n個相同字元的字串
- for (int i=0;i<n;i++)
- {
- data[i]=c;
- }
- data[n]='\0';
- size=n;
- }
- mystring::mystring(constchar *source){//字串內容與source相同
- if (source==NULL) //source為NULL
- {
- data=newchar [1];
- *data='\0';
- size=0;
- }
- else{ //source內容不為NULL
- data=newchar[strlen(source)+1];
- strcpy(data,source);//複製source字串
- size=strlen(source);
- }
- }
- mystring::mystring(const mystring &s){//複製建構函式,字串內容與物件s的相同
- data=newchar[s.size+1];
- strcpy(data,s.data);
- size=s.size;
- }
- mystring& mystring::operator =(const mystring &s){ //賦值函式
- if (this==&s)//如果物件s就是自己,直接返回
- {
- return *this;
- }
- if (data!=NULL)//釋放data堆記憶體
- {
- delete [] data;
- }
- data =newchar[s.size+1];//分配堆記憶體
- strcpy(data,s.data);//複製物件s的字串成員
- return *this;
- }
- mystring& mystring::operator =(constchar *s){//=過載
- if (data!=NULL)
- {
- delete [] data;
- }
- size=strlen(s);
- data =newchar[size+1];
- strcpy(data,s);
- return *this;
- }
- mystring::~mystring(){
- if (data!=NULL) //data不為NULL,釋放堆記憶體
- {
- delete [] data;
- data=NULL;
- size=0;