在C++中 我们还可以对一些操作符进行重载 来使其的作用更多样化
例如 我们可以对 + < > 等等字符进行重载 像c++中的string 类型中就该包含了很多字符重载
我们可以对这个字符串进行 + = +=等等运算
但是 不会所有的字符都可以被重载
例如:sizeof() ?: . :: 不能被重载
一些例子如下
1.我们想给对象的int型变量赋值 想用 nu = 200;的方式 nu是一个Num类 不是int 型的
所以 我么对=进行重载
=是双目运算符 对他进行重载时 系统默认左边的是类对象 右边的是n
所以只有一个参数n
#在类内对操作符进行重载时 只能有一个参数
public:
int operator =(int n)
{
nValue = n;
return n;
}
下面对+来进行重载
首先 +运算符有两个情况
1.对象在+左边
在类内对操作符重载系统会默认左边参数为类对象
所以在类内定义
public:
int operator +(int n)
{
return nValue+n;
}
2.对象在+右边
int operator +( int n, Num& nu)
{
return nu.nValue + n;
}
因为类外函数不识别类内私有成员 所以我们队函数进行友元标记
类中成员是私有的话 用友元关键字对+的重载操作函数进行标记
public:
friend int operator +(int n, Num& nu);
//类中成员是私有的话 用友元关键字对+的重载操作函数进行标记
最后 一些注意事项:
//sizeof() ?: . :: 不能被重载
//重载不能改变优先级
//重载操作符不能有默认参数
//-> [] = () 必须在类内重载
完整代码如下
#include<iostream>
using namespace std;
class Num
{
private:
int nValue;
public:
Num(int n)
{
nValue = n;
}
public:
int operator =(int n)
{
nValue = n;
return n;
}
public:
int operator +(int n)
{
return nValue+n;
}
public:
friend int operator +(int n, Num& nu);
//类中成员是私有的话 用友元关键字对+的重载操作函数进行标记
};
int operator +( int n, Num& nu)
{
return nu.nValue + n;
}
int main()
{
Num nu(100);
//cout << nu.nValue << endl;
//nu = 200;
//cout << nu.nValue << endl;
//nu=nu + 100;
//cout << nu.nValue << endl;
cout << nu + 100 << endl;
return 0;
}
//sizeof() ?: . :: 不能被重载
//重载不能改变优先级
//重载操作符不能有默认参数
//-> [] = () 必须在类内重载