上一个例子中是仿string类Str使用的是char数组类储存,但是这样有大小限制(100),能不能让它动态的进行调整大小呢?
已定义的char数组行不通,但是让一个指针指向一块规定大小的内存是可以的,于是我可以使用内存分配来完成任意大小的Str类
这种方法叫动态内存分配
类型指针=new 类型名;
char *pstr=new char[n];
strcpy(pstr,"c++");
为pstr指针分配n个char大小的内存来保存数据,然后用strcpy把“c++”复制到pstr指针指向的地址。
new关键字会开辟一个大小为n个char类型大小的空间,然后让指针指向它。
于是可以修改一下类Str,使得更好用:
class Str
{
char *str;
int n;
const static int SIZEMAX = 100; //每次输入的字符串长度
public:
Str(){
str = NULL;
n = 0;
}
Str(const char *pstr){
str = new char[n = strlen(pstr) + 1]; // 使用new为分配n+1个char大小的内存,并用str指向
}
Str operator+(const Str &s)
{
Str temp;
delete[]temp.str;
temp.str = new char[temp.n = (strlen(str) + strlen(s.str)) + 1];
return temp;
}
friend Str operator+(const char *pstr, const Str &s)
{
Str temp;
delete[]temp.str;
temp.str = new char[temp.n = (strlen(pstr) + strlen(s.str)) + 1];
return temp;
}
Str &operator=(const Str &s)
{
delete[]str;
str = new char[n = strlen(s.str) + 1];
return *this;
}
Str &operator=(const char *pstr) //当Str对象=字符串指针时的特别情况
{
delete[]str;
str = new char[n = strlen(pstr) + 1];
return *this;
}
friend ostream &operator<<(os