string类,求救!
我试着自己写了一个string类,编译后有一个错误:error C2533: 'QString::QString' : constructors not allowed a return type
很不明白为什么,请高手指教.
也请大家对这个类的各方面评价一下,多给一些建议.
/******************QString.h*************************************************************/////////////////////
#ifndef _QSTRING_H
#define _QSTRING_H
class QString
{
public:
////QString str;
////char *str="qiuzicheng";QString str(str);
////QString QStr;QString str(Q_str);
QString();
QString(char* );
QString(QString& );
///QString(int size);
/////////////////////////////////对象的三种初始化方式
~QString();//////////////析构对象
////////////////操作符重载
//////+,=,==,
//////Q_str1=Q_str2;
//////Q_str1="qiuzicheng";
QString& operator =(QString&);
QString& operator =(char *str);
//////Q_str1=Q_str2+Q_str3;
//////Q_str1=Q_str2+"qiuzicheng";
//////Q_str1="qiuzicheng"+Q_str2;
//////Q_str1="qiu"+"zicheng";
QString operator +(QString &);
QString operator +(char *str);
//friend QString operator +(char *str,QString &Q_str1);
//////Q_str1==Q_str2;
//////Q_str1=="qiuzicheng";
//////"qiuzicheng"==Q_str1;
bool operator ==(QString& Q_str2);
/// bool operator ==(QString& Q_str1,char* str1);
/// bool operator ==(char* str1,QString& Q_str1);
/////Q_str1[0]=Q_str2[1];
char operator [](int );
//////get functions group
int GetSize(){return Q_Size;}
char* GetCstring(){return Q_String;}
protected:
int Q_Size;
char *Q_String;
}
#endif////_QSTRING_H
////////////////////////////////////QString.cpp///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <string.h>
using namespace std;
#include "QString.h"
QString::QString()
{
Q_String="QiuZichengString";
Q_Size=strlen(Q_String);
}
QString::QString(char* str)
{
if(str)
{
Q_String=new char[strlen(str)+1];
strcpy(Q_String,str);
Q_Size=strlen(str);
}
else
{
Q_Size=0;
Q_String=NULL;
}
}
/*QString::QString(int size)
{
if(size)
{
Q_Size=size;
Q_String=new char[size];
strcpy(Q_String,"empty");
}
else
{
cerr<<"Initializing Error!"<<endl;
}
}*/
QString::QString(QString& Q_str)
{
Q_Size=Q_str.Q_Size;
if(Q_str.Q_String)
{
Q_String=new char[Q_Size+1];
strcpy(Q_String,Q_str.Q_String);
}
else
{
Q_String=NULL;
}
}///////////构造函数
QString::~QString()
{
delete []Q_String;
}////////////////析构函数
//**********************************运算符重载***************************************************************************************************************/////////////////////
QString QString::operator +(QString &Q_str)
{
int Total_Size=this->Q_Size+Q_str.Q_Size;
char* str=new char[Total_Size+1];
strcpy(str,Q_str.Q_String);
strcat(str,this->Q_String);
QString Result(str);
return Result;
}
QString QString::operator +(char *str)
{
QString Des_str(str);
return ((*this)+Des_str);
}//////////operator +
QString& QString::operator =(char *str)
{
this->Q_Size=strlen(str);
delete []this->Q_String;
this->Q_String=new char[Q_Size+1];
strcpy(Q_String,str);
return *this;
}
QString& QString::operator =(QString& Q_str)
{
Q_Size=Q_str.Q_Size;
delete []Q_String;
Q_String=new char[Q_Size+1];
strcpy(Q_String,Q_str.Q_String);
return *this;
}/////operator =
bool QString::operator ==(QString& Q_str)
{
if(Q_Size!=Q_str.Q_Size)
if(!strcmp(Q_String,Q_str.Q_String))
return false;
else
cerr<<"class matching wrong!"<<endl;
else if(!strcmp(Q_String,Q_str.Q_String))
cerr<<"class matching wrong!"<<endl;
else
return true;
}
void main()
{
}