目录
要求
自定义一个String类(注意是大写,不是自带的string),要求实现下面的功能
class String{public:
String(const string &s); //构造函数
~ String(void){} //析构函数//友元运算符重载
friend String operator +(const String &s1,const String &s2);
friend bool operator >(const String &s1,const String &s2);
friend bool operator <(const String &s1,const String &s2);
friend bool operator ==(const String &s1,const String &s2);//成员函数运算符
bool operator !=(const String &other);//赋值运算符
String& operator =(const String &s);
// 类型转换
operator string(); //String转string//成员函数
string get_str();private:
string str;
};
要求:比较字符串的长度
思路
一、整体功能概述
定义了一个名为
String
的类,用于模拟字符串的一些操作。通过重载运算符和提供一些成员函数,实现了字符串的拼接、比较、赋值以及类型转换等功能。在main
函数中,创建了两个String
对象,并对这些运算符和函数进行了测试。二、类的分析
String
类:
- 成员变量:
str
:一个string
类型的变量,用于存储实际的字符串内容。- 构造函数:
String(const string& s)
:接受一个string
类型的参数,用于初始化str
成员变量。- 析构函数:
~String()
:空析构函数,目前没有特殊的资源释放操作。- 友元函数:
operator +(const String& s1, const String& s2)
:重载了加法运算符,用于拼接两个String
对象,返回一个新的String
对象,其内容是两个操作数的字符串拼接。operator >(const String& s1, const String& s2)
、operator <(const String& s1, const String& s2)
、operator ==(const String& s1, const String& s2)
:分别重载了大于、小于和等于运算符,用于比较两个String
对象的长度。- 成员函数:
operator!=(const String& other)
:重载了不等于运算符,用于比较两个String
对象的长度是否不相等。operator =(const String& s)
:重载了赋值运算符,用于将一个String
对象赋值给另一个String
对象。operator string()
:类型转换运算符,将String
对象转换为string
类型。get_str() const
:返回str
成员变量的值,即当前String
对象所存储的字符串。三、主函数分析
- 定义了一些
string
类型的变量str
和str2
,并初始化它们为 "hello" 和 "world!"。- 创建了两个
String
对象s1
和s2
,分别使用构造函数进行初始化。- 输出
s1
和s2
的内容。- 输出
s1 + s2
的结果,即两个字符串的拼接。- 使用条件运算符判断
s1
和s2
的大小关系、相等关系和不相等关系,并输出结果。
代码
#include <iostream>
#include <string>
#include <string.h>
using namespace std;
class String {
public:
String(const string& s); //构造函数
~String(){}//析构函数
//友元运算符重载
friend String operator +(const String& s1, const String& s2);
friend bool operator >(const String& s1, const String& s2);
friend bool operator <(const String& s1, const String& s2);
friend bool operator ==(const String& s1, const String& s2);
//成员函数运算符
bool operator !=(const String& other);
//赋值运算符
String& operator =(const String& s);
// 类型转换
operator string(); //String转string
//成员函数
string get_str() const;
private:
string str;
};
String::String(const string& s):str(s){}
String operator +(const String& s1, const String& s2)
{
return s1.str+s2.str;
}
bool operator >(const String& s1, const String& s2)
{
return s1.str.length() > s2.str.length();
}
bool operator <(const String& s1, const String& s2)
{
return s1.str.length() < s2.str.length();
}
bool operator ==(const String& s1, const String& s2)
{
return s1.str.length() == s2.str.length();
}
bool String::operator !=(const String& other)
{
return this->str.length() != other.str.length();
}
String& String::operator =(const String& s)
{
str = s.str;
return *this;
}
String::operator string()
{
return str;
}
string String::get_str() const
{
return str;
}
int main()
{
string s_condition;
string str = "hello";
string str2 = "world!";
String s1 = str;
String s2(str2);
cout << "s1: " << s1.get_str() << endl;
cout << "s2: " << s2.get_str() << endl;
cout << "s1+s2: " << (s1 + s2).get_str() << endl;
(s1 > s2) ? s_condition = "True" : s_condition = "False";
cout << "s1>s2? " << s_condition << endl;
(s1 < s2) ? s_condition = "True" : s_condition = "False";
cout << "s1<s2? " << s_condition << endl;
(s1 != s2) ? s_condition = "True" : s_condition = "False";
cout << "s1!=s2? " << s_condition << endl;
(s1 == s2) ? s_condition = "True" : s_condition = "False";
cout << "s1==s2? " << s_condition << endl;
return 0;
}