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代码