您的位置:首页 > 编程语言 > C语言/C++

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: