当前位置: 首页 > news >正文

如何将自己做的网站变成中文天津疫情最新情况

如何将自己做的网站变成中文,天津疫情最新情况,wordpress自动连接,做网站用盗版PS实现了 MyString 类&#xff0c;同时实现了运算符重载&#xff0c;重载的运算符包括 <、>、、!、<<、>>、[] 等。 如果一个类重载了某个运算符&#xff0c;那么对这个类的对象进行操作的时候便会使用类重载的运算符。比如下边代码 MyString 类中重载了 <、…

实现了 MyString 类,同时实现了运算符重载,重载的运算符包括 <、>、==、!=、<<、>>、[] 等。

如果一个类重载了某个运算符,那么对这个类的对象进行操作的时候便会使用类重载的运算符。比如下边代码 MyString 类中重载了 <、>、==、!=、<<、>> 运算符,那么使用这些运算符操作对象的时候,便会使用对象重载之后的运算符。

(1) <、>、==、!=

① 4 个运算符重载,可以声明为友元函数,也可以声明为类的成员函数

② 声明友元函数时,形参是两个;声明为成员函数时,形参是一个

③ 对象 O1 和 O2 进行比较,成员函数是 O1.operator < (O1);友元函数是 operator < (O1, O2)

④ 声明为成员函数时,默认会带一个 this 指针,*this 是左操作数

(2) <<,>> 流操作符,需要声明为友元函数,不能声明为成员函数

(3) 不能创建新的运算符,只能重载已有的运算符

如下代码,<、>、==、!=、<<、>> 均声明为友元函数。

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <string>class MyString {
public:MyString(); // 默认构造函数MyString(int n, char c); // 普通构造函数MyString(const char *str); // 普通构造函数MyString(const MyString &str); // 拷贝构造函数MyString& operator = (char *str); // 重载 =,使用字符串赋值MyString& operator = (const MyString &s); // 重载 =,使用对象赋值~MyString(); // 析构函数char& operator[] (int i); // 重载 [], 实现数组操作const char& operator[] (int i) const; // 重载 [],事项数组操作,对象为常量MyString& operator += (const MyString& str); // 重载 +=,与对象相加MyString& operator += (const char *str); // 重载 +=,与字符串相加friend std::ostream& operator << (std::ostream& out, MyString& str); // 重载 <<,实现输出流friend std::istream& operator >> (std::istream& in, MyString& str); // 重载 >>,实现输入流friend bool operator < (const MyString& left, const MyString& right); // 重载 <friend bool operator > (const MyString& left, const MyString& right); // 重载 >friend bool operator == (const MyString& left, const MyString& right); // 重载 ==friend bool operator != (const MyString& left, const MyString& right); // 重载 !=char *GetData() const;// 对象被声明为 const,那么这个对象调用的函数也需要是 const 类型int Size() const;private:int size;char *data = nullptr;
};MyString::MyString() {// 默认构造函数,只包括一个字符 '\0'printf("MyString()\n");data = new char[1];*data = '\0';size = 0;
}MyString::MyString(int n, char c) {printf("MyString(int n, char c), n = %d, c = %c\n", n, c);data = new char[n + 1];for (int i = 0; i < n; i++) {*(data + i) = c;}*(data + n) = '\0';size = n;
}MyString::MyString(const char *str) {printf("MyString(const char *str), str = %s\n", str);if (str == nullptr) {data = new char[1];*data = '\0';size = 0;} else {data = new char[strlen(str) + 1];strcpy(data, str);size = strlen(str);}
}MyString::MyString(const MyString &str) {printf("MyString(const MyString &str), str = %s\n",  str.GetData());data = new char[str.size + 1];strcpy(data, str.data);size = str.size;
}MyString& MyString::operator = (char *str) {printf("operator =, MyString = char *, str = %s\n", str);if (data != nullptr) {delete []data;}data = new char[strlen(str) +1];strcpy(data, str);return *this;
}MyString&MyString::operator = (const MyString& str) {printf("operator =, MyString = MyString, str = %s\n", str.GetData());if (this == &str) {return *this;}if (data != nullptr) {delete []data;}data = new char[str.size + 1];strcpy(data, str.data);return *this;
}MyString::~MyString() {if (data != nullptr) {delete []data;data = nullptr;size = 0;}
}char& MyString::operator [](int i) {return data[i];
}const char& MyString::operator[] (int i) const {printf("operator [], const\n");return data[i];
}MyString& MyString::operator +=(const MyString& s) {printf("operator += MyString, str = %s\n", s.GetData());int length = size + s.size + 1;char *tmp = data;data = new char[length];size = length - 1;strcpy(data, tmp);strcat(data, s.data);delete []tmp;return *this;
}MyString& MyString::operator += (const char *str) {printf("operator += char *, str = %s\n", str);if (str == nullptr) {return *this;}int length = size + strlen(str) + 1;char *tmp = data;data = new char[length];size = length - 1;strcpy(data, tmp);strcat(data, str);delete []tmp;return *this;
}int MyString::Size() const {return size;
}char* MyString::GetData() const {return data;
}std::ostream& operator << (std::ostream &out, MyString &str) {for (int i = 0; i < str.Size(); i++) {out << str[i] << " ";}return out;
}std::istream& operator >> (std::istream& in, MyString& str) {char p[50];in.getline(p, 50);str = p;return in;
}bool operator < (const MyString& left, const MyString& right) {int i = 0;while (left[i] != '\0' && right[i] != '\0' && left[i] == right[i]) {i++;}if (left[i] < right[i]) {return true;}return false;
}bool operator > (const MyString& left, const MyString& right) {int i = 0;while (left[i] != '\0' && right[i] != '\0' && left[i] == right[i]) {i++;}if (left[i] > right[i]) {return true;}return false;
}bool operator == (const MyString& left, const MyString& right) {if (left.Size() != right.Size()) {return false;}int i = 0;while (left[i] != '\0' && right[i] != '\0') {if (left[i] != right[i]) {return false;}i++;}return true;
}bool operator != (const MyString& left, const MyString& right) {if (left.Size() != right.Size()) {return true;}int i = 0;while (left[i] != '\0' && right[i] != '\0') {if (left[i] != right[i]) {return true;}i++;}return false;
}int main() {printf("构造 --------------------------------\n");MyString s1(3, 'a'); // 默认构造函数MyString s2(s1); // 拷贝构造函数MyString s3("abcdefghijklmn"); // 通过 char * 来构造函数MyString s4; // 空的字符串printf("\noperator << --------------------------------\n");std::cout << "s1: " << s1 << std::endl; // 输出字符串,使用重载的运算符 <<std::cout << "s2: " << s2 << std::endl;std::cout << "s3: " << s3 << std::endl;std::cout << "s4: " << s4 << std::endl;printf("\noperator = --------------------------------\n");s4 = s3; // 字符串赋值,使用字符串对象赋值std::cout << "s4: " << s4 << std::endl;s4 = "abcd"; // 使用 char * 赋值std::cout << "s4: " << s4 << std::endl;std::cout << "s4[2] = " << s4[2] << std::endl;printf("\noperator += --------------------------------\n");s4 += "mmmm";std::cout << "s4: " << s4 << std::endl;s4 += s2;std::cout << "s4: " << s4 << std::endl;printf("\noperator >> --------------------------------\n");std::cin >> s2;std::cout << "s2: " << s2 << std::endl;printf("\n<, >, ==, != --------------------------------\n");MyString t1 = "1234";MyString t2 = "1234";MyString t3 = "12345";MyString t4 = "12335";std::cout << "t1 == t2 ? " << (t1 == t2) << std::endl;std::cout << "t1 < t3 ? " << (t1 < t3) << std::endl;std::cout << "t1 > t4 ?  " << (t1 > t4) << std::endl;std::cout << "t1 != t4 ? " << (t1 != t4) << std::endl;return 0;
}

如下代码,<、>、==、!= 声明为成员函数,当成员函数和友元函数同时存在时,优先选用成员函数。

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <string>class MyString {
public:MyString(); // 默认构造函数MyString(int n, char c); // 普通构造函数MyString(const char *str); // 普通构造函数MyString(const MyString &str); // 拷贝构造函数MyString& operator = (char *str); // 重载 =,使用字符串赋值MyString& operator = (const MyString &s); // 重载 =,使用对象赋值~MyString(); // 析构函数char& operator[] (int i); // 重载 [], 实现数组操作const char& operator[] (int i) const; // 重载 [],事项数组操作,对象为常量MyString& operator += (const MyString& str); // 重载 +=,与对象相加MyString& operator += (const char *str); // 重载 +=,与字符串相加friend std::ostream& operator << (std::ostream& out, MyString& str); // 重载 <<,实现输出流friend std::istream& operator >> (std::istream& in, MyString& str); // 重载 >>,实现输入流friend bool operator < (const MyString& left, const MyString& right); // 重载 <friend bool operator > (const MyString& left, const MyString& right); // 重载 >friend bool operator == (const MyString& left, const MyString& right); // 重载 ==friend bool operator != (const MyString& left, const MyString& right); // 重载 !=bool operator < (const MyString& str); // 重载 <bool operator > (const MyString& str); // 重载 >bool operator == (const MyString& str); // 重载 ==bool operator != (const MyString& str); // 重载 !=char *GetData() const;// 对象被声明为 const,那么这个对象调用的函数也需要是 const 类型int Size() const;private:int size;char *data = nullptr;
};MyString::MyString() {// 默认构造函数,只包括一个字符 '\0'printf("MyString()\n");data = new char[1];*data = '\0';size = 0;
}MyString::MyString(int n, char c) {printf("MyString(int n, char c), n = %d, c = %c\n", n, c);data = new char[n + 1];for (int i = 0; i < n; i++) {*(data + i) = c;}*(data + n) = '\0';size = n;
}MyString::MyString(const char *str) {printf("MyString(const char *str), str = %s\n", str);if (str == nullptr) {data = new char[1];*data = '\0';size = 0;} else {data = new char[strlen(str) + 1];strcpy(data, str);size = strlen(str);}
}MyString::MyString(const MyString &str) {printf("MyString(const MyString &str), str = %s\n",  str.GetData());data = new char[str.size + 1];strcpy(data, str.data);size = str.size;
}MyString& MyString::operator = (char *str) {printf("operator =, MyString = char *, str = %s\n", str);if (data != nullptr) {delete []data;}data = new char[strlen(str) +1];strcpy(data, str);return *this;
}MyString&MyString::operator = (const MyString& str) {printf("operator =, MyString = MyString, str = %s\n", str.GetData());if (this == &str) {return *this;}if (data != nullptr) {delete []data;}data = new char[str.size + 1];strcpy(data, str.data);return *this;
}MyString::~MyString() {if (data != nullptr) {delete []data;data = nullptr;size = 0;}
}char& MyString::operator [](int i) {return data[i];
}const char& MyString::operator[] (int i) const {return data[i];
}MyString& MyString::operator +=(const MyString& s) {printf("operator += MyString, str = %s\n", s.GetData());int length = size + s.size + 1;char *tmp = data;data = new char[length];size = length - 1;strcpy(data, tmp);strcat(data, s.data);delete []tmp;return *this;
}MyString& MyString::operator += (const char *str) {printf("operator += char *, str = %s\n", str);if (str == nullptr) {return *this;}int length = size + strlen(str) + 1;char *tmp = data;data = new char[length];size = length - 1;strcpy(data, tmp);strcat(data, str);delete []tmp;return *this;
}int MyString::Size() const {return size;
}char* MyString::GetData() const {return data;
}std::ostream& operator << (std::ostream &out, MyString &str) {for (int i = 0; i < str.Size(); i++) {out << str[i] << " ";}return out;
}std::istream& operator >> (std::istream& in, MyString& str) {char p[50];in.getline(p, 50);str = p;return in;
}bool operator < (const MyString& left, const MyString& right) {int i = 0;while (left[i] != '\0' && right[i] != '\0' && left[i] == right[i]) {i++;}if (left[i] < right[i]) {return true;}return false;
}bool operator > (const MyString& left, const MyString& right) {int i = 0;while (left[i] != '\0' && right[i] != '\0' && left[i] == right[i]) {i++;}if (left[i] > right[i]) {return true;}return false;
}bool operator == (const MyString& left, const MyString& right) {if (left.Size() != right.Size()) {return false;}int i = 0;while (left[i] != '\0' && right[i] != '\0') {if (left[i] != right[i]) {return false;}i++;}return true;
}bool operator != (const MyString& left, const MyString& right) {if (left.Size() != right.Size()) {return true;}int i = 0;while (left[i] != '\0' && right[i] != '\0') {if (left[i] != right[i]) {return true;}i++;}return false;
}//
bool MyString::operator < (const MyString& str) {int i = 0;while (data[i] != '\0' && str[i] != '\0' && data[i] == str[i]) {i++;}if (data[i] < str[i]) {return true;}return false;
}bool MyString::operator > (const MyString& str) {int i = 0;while (data[i] != '\0' && str[i] != '\0' && data[i] == str[i]) {i++;}if (data[i] > str[i]) {return true;}return false;
}bool MyString::operator == (const MyString& str) {if (size != str.Size()) {return false;}int i = 0;while (data[i] != '\0' && str[i] != '\0') {if (data[i] != str[i]) {return false;}i++;}return true;
}bool MyString::operator != (const MyString& str) {if (size != str.Size()) {return true;}int i = 0;while (data[i] != '\0' && str[i] != '\0') {if (data[i] != str[i]) {return true;}i++;}return false;
}int main() {printf("构造 --------------------------------\n");MyString s1(3, 'a'); // 默认构造函数MyString s2(s1); // 拷贝构造函数MyString s3("abcdefghijklmn"); // 通过 char * 来构造函数MyString s4; // 空的字符串printf("\noperator << --------------------------------\n");std::cout << "s1: " << s1 << std::endl; // 输出字符串,使用重载的运算符 <<std::cout << "s2: " << s2 << std::endl;std::cout << "s3: " << s3 << std::endl;std::cout << "s4: " << s4 << std::endl;printf("\noperator = --------------------------------\n");s4 = s3; // 字符串赋值,使用字符串对象赋值std::cout << "s4: " << s4 << std::endl;s4 = "abcd"; // 使用 char * 赋值std::cout << "s4: " << s4 << std::endl;std::cout << "s4[2] = " << s4[2] << std::endl;printf("\noperator += --------------------------------\n");s4 += "mmmm";std::cout << "s4: " << s4 << std::endl;s4 += s2;std::cout << "s4: " << s4 << std::endl;printf("\noperator >> --------------------------------\n");std::cin >> s2;std::cout << "s2: " << s2 << std::endl;printf("\n<, >, ==, != --------------------------------\n");MyString t1 = "1234";MyString t2 = "1234";MyString t3 = "12345";MyString t4 = "12335";std::cout << "t1 == t2 ? " << (t1 == t2) << std::endl;std::cout << "t1 < t3 ? " << (t1 < t3) << std::endl;std::cout << "t1 > t4 ?  " << (t1 > t4) << std::endl;std::cout << "t1 != t4 ? " << (t1 != t4) << std::endl;return 0;
}

文章转载自:
http://footballer.dkqr.cn
http://epicrisis.dkqr.cn
http://orderly.dkqr.cn
http://phytohormone.dkqr.cn
http://mesozoic.dkqr.cn
http://nidget.dkqr.cn
http://profusive.dkqr.cn
http://hamous.dkqr.cn
http://morigeration.dkqr.cn
http://dramaturgy.dkqr.cn
http://dofunny.dkqr.cn
http://dulcitone.dkqr.cn
http://drivepipe.dkqr.cn
http://palinode.dkqr.cn
http://virilocal.dkqr.cn
http://mortification.dkqr.cn
http://unate.dkqr.cn
http://computable.dkqr.cn
http://discernment.dkqr.cn
http://rockily.dkqr.cn
http://keratoscope.dkqr.cn
http://from.dkqr.cn
http://brushback.dkqr.cn
http://hemizygote.dkqr.cn
http://lodger.dkqr.cn
http://capsulitis.dkqr.cn
http://drivable.dkqr.cn
http://bragger.dkqr.cn
http://withdrawal.dkqr.cn
http://sporting.dkqr.cn
http://rse.dkqr.cn
http://dispersibility.dkqr.cn
http://petrozavodsk.dkqr.cn
http://appersonation.dkqr.cn
http://seventhly.dkqr.cn
http://curiousness.dkqr.cn
http://ooze.dkqr.cn
http://staple.dkqr.cn
http://sedate.dkqr.cn
http://spiny.dkqr.cn
http://gypster.dkqr.cn
http://pomp.dkqr.cn
http://shoemaker.dkqr.cn
http://catchment.dkqr.cn
http://telfordize.dkqr.cn
http://vsam.dkqr.cn
http://crambo.dkqr.cn
http://hypnogenetically.dkqr.cn
http://caldarium.dkqr.cn
http://untuck.dkqr.cn
http://slicer.dkqr.cn
http://garioa.dkqr.cn
http://likely.dkqr.cn
http://viremia.dkqr.cn
http://myringitis.dkqr.cn
http://hoopoe.dkqr.cn
http://lh.dkqr.cn
http://inguinally.dkqr.cn
http://scandisk.dkqr.cn
http://sitebuilder.dkqr.cn
http://argon.dkqr.cn
http://sovkhoz.dkqr.cn
http://isopathy.dkqr.cn
http://flickering.dkqr.cn
http://patty.dkqr.cn
http://rifty.dkqr.cn
http://quadrennial.dkqr.cn
http://nanaimo.dkqr.cn
http://cajun.dkqr.cn
http://readableness.dkqr.cn
http://almoner.dkqr.cn
http://turps.dkqr.cn
http://mise.dkqr.cn
http://hayloft.dkqr.cn
http://jilin.dkqr.cn
http://dicotyl.dkqr.cn
http://twice.dkqr.cn
http://syringa.dkqr.cn
http://surpliced.dkqr.cn
http://oilstone.dkqr.cn
http://dracone.dkqr.cn
http://medicable.dkqr.cn
http://jimsonweed.dkqr.cn
http://nsb.dkqr.cn
http://subcontractor.dkqr.cn
http://chrysalides.dkqr.cn
http://emporium.dkqr.cn
http://papillate.dkqr.cn
http://otology.dkqr.cn
http://doglike.dkqr.cn
http://trifoliolate.dkqr.cn
http://deathbed.dkqr.cn
http://multilocular.dkqr.cn
http://careerman.dkqr.cn
http://anteater.dkqr.cn
http://speck.dkqr.cn
http://woodruffite.dkqr.cn
http://unseaworthy.dkqr.cn
http://hepta.dkqr.cn
http://comous.dkqr.cn
http://www.hrbkazy.com/news/74600.html

相关文章:

  • 平安网站做的太差seo优化方案模板
  • 合肥电子商务网站建设互联网营销工具有哪些
  • 做网站备案时审批号最近时政热点新闻
  • 潍坊网站制作seo优化是什么职业
  • 做软件常用的网站有哪些优化设计电子课本
  • 免费建立个人网站百度seo
  • 网站建设用什么科目广西seo搜索引擎优化
  • 在哪个网站可以一对一做汉教竞价
  • 东莞做网站seo百度怎么做广告
  • 精品网站建设平台福州模板建站哪家好
  • discuz论坛源码seo业务培训
  • 道路建设去什么网站能看到成都百度推广电话号码是多少
  • 石湾网站建设网络营销简介
  • 学院网站建设的需求分析安康seo
  • 网页编辑布局在线澳门seo关键词排名
  • 免费二级域名注册网站营销策划公司主要做些什么
  • 成都网站设计服务网络营销知识点
  • 丰富政府网站功能怎样做一个网站
  • 推荐常州网站建设怎么推广引流客户
  • 1号店网站模板下载软文推广文章案例
  • 自己做网站代理产品搜索引擎案例分析结论
  • 郑州营销型网站建设价格seo广告投放是什么意思
  • 建筑人才网站哪个比较好网站推广seo招聘
  • 邵阳建设银行网站是多少微信小程序免费制作平台
  • 网站建设需要些什么软件超级seo助手
  • h5游戏大厅百度seo培训
  • 做网站需要怎么分工宁波网站建设
  • 绍兴网站建设专业的公司学电子商务出来能干嘛
  • 如何在亚马逊开店流程及费用账号seo是什么
  • 利用bootstrap做的网站bt搜索引擎最好用的