今天闲来无事,想起动态语言里string的实现,自己也想用c++模拟下,于是便有了下文,写的过程中发现命名空间竟然不支持friend友元的使用,真郁闷,看来vc对c++标准支持的是蛮垃圾的。
#include<iostream.h>
#include<string.h>
#include<stdlib.h>
//using namespace std;
class v_string{
public:
v_string();
v_string(char*);
v_string(int);
v_string(const v_string&);
~v_string();
v_string operator +(char *);
v_string operator+(int);
void operator =(char*);
void operator =(int);
void operator =(v_string&);
friend ostream& operator <<(ostream& os,const v_string& v);
int getint();
private:
char *str;
int len;
};
ostream& operator <<(ostream &os,const v_string& v){
os<<v.str;
return os;
}
v_string::v_string(){
str=new char;
*str=0;
len=0;
}
v_string::v_string(char* s){
int a=strlen(s);
str=new char[a+1];
strcpy(str,s);
len=a;
}
v_string::v_string(int s){
char t[100]={0};
itoa(s,t,10);
int a=strlen(t);
str=new char[a+1];
strcpy(str,t);
len=a;
}
v_string::v_string(const v_string& v){
len=v.len;
str=new char[len+1];
strcpy(str,v.str);
}
v_string::~v_string(){
delete []str;
len=0;
}
v_string v_string::operator +(char *s){
int a=strlen(s);
v_string v;
v.str=new char[len+a+1];
v.len=len+a+1;
strcpy(v.str,str);
strcat(v.str,s);
return v;
}
v_string v_string::operator +(int s){
char t1[100]={0};
itoa(s,t1,10);
int a=strlen(t1);
v_string v;
v.len=len+a+1;
strcpy(v.str,str);
strcat(v.str,t1);
return v;
}
void v_string::operator =(char *s){
delete []str;
len=strlen(s);
str=new char[len+1];
strcpy(str,s);
}
void v_string::operator =(v_string& v){
len=v.len;
delete []str;
len=strlen(v.str);
str=new char[len+1];
strcpy(str,v.str);
}
int v_string::getint(){
return atoi(str);
}
给出个使用实例:
main(){
v_string a,a1,a2;
a=a1+"34fgd";
a2=a+3453;
cout<<a<<endl<<a.getint()<<endl<<a2;
}
只写了部分功能,还有许多有待改善,写的不好,还望大家多多指教。