12.2

12.2 改进后的新String类

delete [] 只能用于 new [] 和空指针, 用于其他方式初始化的指针, 结果将是不确定的。
初始化空字符串的方法
str = new char[1];
str[0] = '\0';
str = 0;
都于析构函数的delete []兼容

C++11空指针

C++98中:0可以表示数值, 也可以表示空指针
区分:(void *) 0、NULL
C++11:引入关键字nullptr, 用于表示空指针。

比较成员函数

可以使用 > 运算符表示 < 运算符, 对于内联函数, 这是一种很好的选择

使用中括号表示法访问字符

char & String::operator[](int i)
{
return str[i];
}
将返回值类型声明为 char & 可以给字符赋值
在重载时, C++会区分常量和非常量函数的特征标, 仅给const String对象使用的版本
const char & String::operator[](int i) consst
{
return str[i];
}

静态类成员函数

可以将成员函数声明为静态的(函数声明必须使用static, 但如果函数定义是独立的, 则其中不能包含关键字static)
1.不能通过对象调用静态成员函数(不能使用this指针)
如果静态成员函数是在公有部分声明的, 则可以使用类名和作用域解析运算符来调用它。
2.静态成员函数不与特定的对象关联, 因此只能使用静态数据成员。

进一步重载赋值运算符

使得字符串可以直接使用赋值运算符, 而不用先调用构造函数生成临时对象, 再将临时对象复制到对象中, 效率稍低
String & operator =(const char * s)
{
delete [] str;
len = std::strlen(s);
str = new char [len + 1];
std::strcpy(str, s);
return *this;
}
整体String代码