# 运算符重载的规则
* 只能对C++已有的运算符进行重载,不能定义新的运算符
* 重载的运算符的作用的操作数至少有一个对象
* 不能改变运算符的运算对象的个数
* 不能改变运算符的优先级
* 不能改变运算符的结合性
* 重载运算符的函数不能有默认参数
* 当函数的参数列表中有两个参数时,一般重载为友元形式
* 赋值运算符,下表运算符,函数调用运算符必须定义为函数的成员函数
* 流插入运算符,流提取运算符,类型转换运算符不能定义为类的成员函数
# 定义方式
~~~
T operator 操作符(形参列表) //T代表返回值的类型
{
··· //函数体
}
~~~
# 允许重载的运算符
![image-20200607000238121](file://C:/Users/28165/AppData/Roaming/Typora/typora-user-images/image-20200607000238121.png?lastModify=1591534259)
# 不允许重载的运算符
| . | 成员访问运算符 |
| --- | --- |
| .\* | 成员指针访问运算符 |
| :: | 域运算符 |
| sizeof | 长度运算符 |
| ?: | 条件运算符 |
# 例子
~~~
#include <iostream>
using namespace std;
class String
{
public:
String( ){p=NULL;} //默认构造函数
String(char *str); //构造函数
friend bool operator> (String &string1, String &string2);
friend bool operator< (String &string1, String &string2);
friend bool operator==(String &string1, String & string2);
void display( );
private:
char *p; //字符型指针,用于指向字符串
};
String∷String(char *str) //定义构造函数
{
p=str;
} //使p指向实参字符串
void String∷display( ) //输出p所指向的字符串
{
cout<<p;
}
bool operator>(String &string1,String &string2) //对运算符“>”重载
{
if(strcmp(string1.p,string2.p)>0)
return true;
else
return false;
}
bool operator<(String &string1,String &string2) //对运算符“<”重载
{
if(strcmp(string1.p,string2.p)<0)
return true;
else
return false;
}
bool operator==(String &string1,String&string2) //对运算符“==”重载
{
if(strcmp(string1.p,string2.p)==0)
return true;
else
return false;
}
void compare(String &string1,String &string2)
{
if(operator>(string1,string2)==1)
{
string1.display( );
cout<<″>″;
string2.display( );
}
else
if(operator<(string1,string2)==1)
{
string1.display( );cout<<″<″;string2.display( );
}
else if(operator==(string1,string2)==1)
{
string1.display( );cout<<″=″;string2.display( );
}
cout<<endl;
}
int main( )
{
String string1(″Hello″),string2(″Book″),string3(″Computer″),string4(″Hello″);
compare(string1,string2);
compare(string2,string3);
compare(string1,string4);
return 0;
}
~~~
- 介绍
- 编程设计语言
- 第一章 对C++的初步认识
- 1.2 最简单的C++程序
- 1.3 C++对C的补充
- 1.3.1 return
- 1.3.2 输入输出流
- 1.3.3 putchar 和 getchar
- 1.3.4 用const定义常变量
- 1.3.5 函数原型声明
- 1.3.6 内置函数
- 1.3.7 函数重载
- 1.3.8 函数模板
- 1.3.9 有默认值的参数
- 1.3.10 作用域
- 1.3.11 const修饰指针
- 1.3.12 引用
- 1.3.13 生命期
- 1.3.14 变量
- 1.3.15 字符串变量
- 第二章 类与对象
- 2.2 类的声明和对象的定义
- 2.3 类的成员函数
- 第三章 关于类和对象的进一步讨论
- 3.1 构造函数
- 3.1.1 对象的初始化
- 3.1.2 构造函数
- 3.2 析构函数
- 3.3调用析构函数和构造函数的顺序
- 3.4 对象数组
- 3.5 对象指针
- 3.6 共享数据的保护
- 3.7 对象的建立与释放
- 3.8 对象的赋值与复制
- 3.9 静态成员
- 3.10 友元
- 3.11 类模板
- 第四章 运算符重载
- 数据类型转换
- 运算符重载
- 重载流插入运算符和流提取运算符
- 第五章 继承与派生
- 继承与派生
- 第六章 多态性与虚函数
- 多态性
- 虚函数
- 纯虚函数与抽象类