在前面文章中使用过几次String类的例子,现在多重载几个运算符,更加完善一下,并且重载流类运算符。
[]运算符重载
+运算符重载
+=运算符重载
<<运算符重载
>>运算符重载
1 |
#ifndef _STRING_H_
#define _STRING_H_ #include <iostream> using namespace std; class String bool friend String friend ostream & void Display() private: #endif |
1 |
#pragma warning(disable:
) #include "String.h" #include <string.h> //#include <iostream> //using namespace std; String::String( String::String( String &String:: return Assign(other.str_); String &String:: String &String::Assign( bool String:: char &String:: return const String::~String() char *String::AllocAndCpy( return newstr; void String::Display() String String &String:: delete[] str_; str_ = newstr; ostream & istream & |
1 |
#include
"String.h" #include <iostream> using namespace std; int main( char ch = s1[ s1[ const String s2( String s3 = String s5 = s3 + s4; String s6 = s3 += s4; cout << s3 << endl; String s7; return |
需要注意的是,不能将String类的构造函数声明为explicit,否则 String s3 = "xxx"; 编译出错;operator[] 的non const 版本调用了const 版本的实现,其中使用了static_cast和 const_cast 两种类型转换操作符,可以参考这里;operator+ 调用了operator+= 的实现;只能将流类运算符重载为友元函数,因为第一个参数是流类引用,不是String 类。