模块化设计:
头文件:
<span style="font-size:18px;">
#ifndef operator_operator_h #define operator_operator_h #include <iostream> #include <string> using namespace std; class MyString { public: //三个重载的构造函数 MyString(); MyString(const char* str); MyString(const MyString& str); //析构函数 ~MyString(); //重载运算符 MyString& operator = (const MyString& str); char& operator[](int index);//访问下标 friend ostream& operator << (ostream& out, const MyString& str); //重载输出操作符 friend istream& operator >> (istream& in, MyString& str); //重载输入操作符 friend MyString operator + (const MyString& str1, const MyString& str2); //重载加号操作符,注意返回引用不行 friend MyString operator += (MyString& str1, const MyString& str2); //重载+=操作符 friend bool operator == (const MyString& str1, const MyString& str2); //重载相等操作符 friend bool operator != (const MyString& str1, const MyString& str2); //重载不相等操作符 private: char* p; int len; }; #endif;
</span>
功能函数:
<span style="font-size:18px;">
#include "operator.h" //默认构造函数,初始化为空串 MyString::MyString() { len = 0; p = new char[len + 1]; p[0] = '\0'; } //构造函数,用一个字符串初始化 MyString::MyString(const char* str) { len = strlen(str); p = new char[strlen(str) + 1]; strcpy_s(p, strlen(str) + 1, str); } //拷贝构造函数,用另外一个string初始化 MyString::MyString(const MyString& str) { len = str.len; p = new char[strlen(str.p) + 4]; strcpy_s(p, strlen(str.p) + 1, str.p); } //析构函数 MyString::~MyString() { delete[] p; } //重载赋值操作符( = ) MyString& MyString::operator = (const MyString& str) { if (this->p == str.p) { return *this; } delete[] p; len = str.len; p = new char[len + 1]; strcpy_s(p, len + 1, str.p); return *this; } //重载输出操作符( << ) ostream& operator << (ostream& out, const MyString& str) { out << str.p; return out; } //重载输入操作符( >> ) istream& operator >> (istream& in, MyString& str) { in >> str.p; return in; } //重载加号操作符( + ) MyString operator + (const MyString& str1, const MyString& str2) { MyString str; delete[] str.p; str.len = str1.len + str2.len; str.p = new char[str.len + 1]; strcpy_s(str.p, str.len + 1, str1.p); strcat_s(str.p, str.len + 1, str2.p); return str; } //重载相加赋值操作符( += ) MyString operator += (MyString& str1, const MyString& str2) { str1 = str1 + str2; return str1; } //重载相等操作符 bool operator == (const MyString& str1, const MyString& str2) { if (strcmp(str1.p, str2.p) == 0) { return true; } return false; } //重载不相等操作符 bool operator != (const MyString& str1, const MyString& str2) { if (strcmp(str1.p, str2.p) == 0) { return false; } return true; } //重载下标([]) char& MyString::operator[](int index) { return p[index]; } </span>
测试程序:
<span style="font-size:18px;"> #include "operator.h" int main() { MyString mystr("asfasgdhf"); //测试构造函数,用一个字符串初始化 cout << mystr[2] << endl; mystr[4] = 'd'; cout << mystr <<endl; MyString mystr2(mystr); //用另外一个string初始化 cout << mystr2 << endl; MyString mystr3; mystr3 = mystr + mystr2; //测试加号运算符,测试赋值运算符 cout << mystr + mystr2 << endl; mystr3 += mystr; //测试+=运算符 cout << mystr3 << endl; cout << (mystr == mystr2) << endl; //测试 == cout << (mystr != mystr3) << endl; //测试 != MyString mystr4; cout << "Input a series characters, end of ctrl+z." << endl; cin >> mystr4; //测试重载的输入符号( >> ) cout << mystr4 << endl; return 0; } </span>
运行结果:
时间: 2024-10-19 21:42:51