12-2改进后的新String类
12.2改进后的新String类
注意:c++11建议使用nullptr来表示空指针
String类与常规c字符串进行比较时,会转换成String类
先使用构造函数将c字符串转换为String类,再将两个String类进行比较
12.2.1使用中括号来访问String类中的字符
虽然对于二元操作符来说,两个操作数一个位于操作符的左侧,另一个位于右侧。但是对于[]来说,一个位于左侧,一个位于内部,这已经被设置好了。
//函数原型 |
注:返回值被设置为引用是为了解决如下赋值问题
String means("might"); |
对于const类型的String类,使用[]可能导致出错,因为[]函数不能保证不修改数据
解决方案
采用函数重载来提供一个仅供const String使用的operator版本
(c++会区分常量和非常量函数的特征标)
//重载后的函数原型 |
12.2.2静态类成员函数
不能通过对象来调用静态类成员函数,静态类成员函数也不能使用this指针(因为静态类成员属于整个类)
//调用方法 |
12.2.3进一步重载赋值运算符
将常规字符串复制到String类对象中,因为隐含步骤较多,解决方法比较差
String name; |
函数先调用了构造函数String(const char *)创建了一个匿名的临时对象
再使用String & String::operator=(const String &)来复制对象
最后调用析构函数来删除临时对象
解决方案
通过重载赋值运算符来直接使用常规字符串,简化了创建和删除工作
String & String::operator=(const char *) |
发布于