首页 > 代码库 > 运算符重载(二)

运算符重载(二)

    String类:

技术分享

一 []运算符的重载

    []运算符的使用可能有以下几种情况:

String s1="asdfdsf";const String s2="abcd";char A=s1[2]; //1s1[2]=a; //2char B=s2[2];  //3s2[2]=b;  //4

对于1和2的情况,需要重载:

char& operator[](unsigned int index);

返回引用是为了可以实现情况2。

    对于const String,3允许但4不允许,所以要返回const string&

char& String::operator[](unsigned int index){    //return str_[index];    //non const 版本调用 const版本    return const_cast<char&>(static_cast<const String&>(*this)[index]);//先把*this转换成从const,调用const函数,在去掉const属性}const char& String::operator[](unsigned int index) const{    return str_[index];}

二 +运算符的重载

String s3 = "xxx";String s4 = "yyy";String s5 = s3 + s4; //1String s6 = "zzz" + s4;  //2

    为了允许情况2,+运算符需要重载为友元,同时还要有一个转换构造函数配合:

friend oprator+(const String& s1, const String& s2);

 但是不允许+两侧都是非对象类型。

String String::(const String& s1, cosnt String& s2){    int len = strlen(s1.str_) + strlen(s2.str_) + 1;    char* newstr = new char[len];    memset(newstr, 0, len);    strcpy(newstr, s1.str_);    strcat(newstr, s2.str_);    String tmp(newstr);    delete newstr;    return tmp;}

三 <<运算符

friend ostream& operator<<(ostream& os, cosnt String& s);

 

运算符重载(二)