c++运算符重载总结
2017-02-10 20:35
357 查看
今天学了运算符的重载,对于c++,相比C语言而言语法又多且杂,难背又难记,最近真有点懈怠......还是要加油
#ifndef _STRING_H_ #define _STRING_H_ #include <iostream> using namespace std; class String { public: //static int MAX_LEN; //friend class StringTool; //friend void print(const String &s1); String(); String(char *str); ~String(); String(const String& other); void myStrcat(); void Display() const; void setMAXLEN(int maxLen); int getMAXLEN(); String& operator=(const String& other); String& operator=(char *str); char& operator[](unsigned int index); const char& operator[](unsigned int index) const; String& operator+=(const String &s); friend String operator+(const String& s1, const String& s2); friend ostream& operator<<(ostream &out, const String &s); friend istream& operator>>(istream &in,String& s); operator char *(); private: char *str_; static const int MAX_LEN = 1024; //String(const String& other);//绂佹鎷疯礉 }; #endif
#include <iostream> #include <string.h> #include "String.h" using namespace std; //int String::MAX_LEN = 1024; String::String() { str_ = new char('\0'); cout << "default constrcutor String" << endl; } String::String(char *str) { cout << "construct String" << endl;//str_ = str; int len = strlen(str) + 1; str_ = new char[len]; memset(str_,0,len); strcpy(str_,str); } String::String(const String& other) { int len = strlen(other.str_) + 1; str_ = new char[len]; memset(str_,0,len); strcpy(str_,other.str_); } String::~String() { cout << "destroy String" << endl; delete [] str_; } String::operator char*() { return str_; } String& String::operator=(const String& other) { if(this == &other) { return *this; } int len = strlen(other.str_) + 1; delete [] str_; str_ = new char[len]; memset(str_,0,len); strcpy(str_,other.str_); return *this; } String& String::operator=(char *str) { cout << "operator char *str" << endl; int len = strlen(str) + 1; delete [] str_; str_ = new char[len]; memset(str_,0,len); strcpy(str_,str); return *this; } char& String::operator[](unsigned int index) { cout << "no const []" << endl; return const_cast<char&>(static_cast<const String&>(*this)[index]); } const char& String::operator[](unsigned int index) const { cout << "const []" << endl; return str_[index]; } String operator+(const String& s1, const String& s2) { /* int len = strlen(s1.str_) + strlen(s2.str_) + 1; char *newptr= new char[len]; memset(newptr,0,len); strcpy(newptr,s1.str_); strcat(newptr,s2.str_); String temp(newptr); */ String temp(s1); temp += s2; return temp; } String& String::operator+=(const String &s) { int len = strlen(str_) + strlen(s.str_) + 1; char *newptr = new char[len]; strcpy(newptr,str_); strcat(newptr,s.str_); delete [] str_; str_ = new char[len]; strcpy(str_,newptr); return *this; } ostream& operator<<(ostream &out, const String& s) { out << s.str_; return out; } istream& operator>>(istream &in, String& s) { char buffer[1024]; in >> buffer; int len = strlen(buffer) + 1; delete [] s.str_; s.str_ = new char[len]; strcpy(s.str_,buffer); return in; } void String::Display() const { cout << str_ << endl; } void String::setMAXLEN(int maxLen) { } int String::getMAXLEN() { return MAX_LEN; }
#include <iostream> #include "String.h" #include "Stringtool.h" using namespace std; int main() { #if 0 String s1; s1 = "hello"; cout << s1[1] << endl; s1[1] = 'E'; s1.Display(); String s2("world"); cout << s2[1] << endl; //s[2] = 'L'; String s3("kkk"); //s3 = s1 + s2; s3+=s1;//s3 = s3 + s1; s3.Display(); #endif String s("hello world"); cout << s << endl; cin >> s; cout << s << endl; char *ptr = static_cast<char *>(s); cout << ptr << endl; return 0; }