参考链接
重载操作
重载操作分为重载运算和重载函数。
重载函数
在同一个作用域内,可以声明几个功能类似的同名函数,但是这些形式参数(参数个数、数据类型或者顺序)不同。不能通过返回类型来重载函数。
#include <iostream>
using namespace std;
class dataDisposeClass
{
public:
dataDisposeClass();
~dataDisposeClass();
float multiDispose(int iTmpVar1, double iTmpVar2);
float multiDispose(double iTmpVar1, int iTmpVar2);
int multiDispose(int iTmpVar1, int iTmpVar2);
int multiDispose(int iTmpVar1, int iTmpVar2, int iTmpVar3);
private:
};
/*整型 * 整型*/
int dataDisposeClass::multiDispose(int iTmpVar1, int iTmpVar2)
{
return iTmpVar1 * iTmpVar2;
}
/*小数 * 整型*/
float dataDisposeClass::multiDispose(double iTmpVar1, int iTmpVar2)
{
return iTmpVar1 * iTmpVar2;
}
/*整型 * 小数*/
float dataDisposeClass::multiDispose(int iTmpVar1, double iTmpVar2)
{
return iTmpVar1 * iTmpVar2;
}
/*整型 * 整型 * 整型*/
int dataDisposeClass::multiDispose(int iTmpVar1, int iTmpVar2, int iTmpVar3)
{
return iTmpVar1 * iTmpVar2 * iTmpVar3;
}
dataDisposeClass::dataDisposeClass(){}
dataDisposeClass::~dataDisposeClass(){}
int main()
{
dataDisposeClass *dispose = new dataDisposeClass();
cout << "1 * 2 = " << dispose -> multiDispose(1, 2) << endl;
cout << "3.1 * 2 = " << dispose->multiDispose(3.1, 2) << endl;
cout << "3 * 2.1 = " << dispose->multiDispose(3, 2.1) << endl;
cout << "3 * 4 * 5 = " << dispose->multiDispose(3, 4, 5) << endl;
getchar();
}
运行结果
1 * 2 = 2
3.1 * 2 = 6.2
3 * 2.1 = 6.3
3 * 4 * 5 = 60
重载运算符
在重载运算符中,需要使用关键字operator并在其后添加运算符符号。重载运算符与重载函数一样,需要一个返回类型和一个参数列表。
类名 operator+(const 类名&)
重载运算符可以创建为类的方法和类的非成员方法。我们在前面讲解过this操作,如果是类的方法来实现两个类的加法,则按照上述声明并结合this即可完成两个类相加;但如果是类的非成员方法,则需要按照下面方法:
类名 operator+(const 类名&, const 类名&)
举例说明:
#include <iostream>
using namespace std;
class dataDisposeClass
{
public:
dataDisposeClass(int iTmpVar1, int iTmpVar2);
~dataDisposeClass();
int getDataInfo();
dataDisposeClass operator+(dataDisposeClass &tmpClass1)
{
dataDisposeClass tmpClass(NULL, NULL); //初始化为0
tmpClass.length = this->length + tmpClass1.length;
tmpClass.width = this->width + tmpClass1.width;
return tmpClass;
}
private:
int length;
int width;
};
dataDisposeClass::dataDisposeClass(int iTmpVar1, int iTmpVar2)
{
length = iTmpVar1;
width = iTmpVar2;
}
int dataDisposeClass::getDataInfo()
{
cout << "Length = " << this->length << " width = " << this->width << endl;
return 1;
}
dataDisposeClass::~dataDisposeClass(){}
int main()
{
dataDisposeClass classVar1(10, 5);
dataDisposeClass classVar2(20, 15);
dataDisposeClass classVar3 = classVar1.operator+(classVar2);
classVar3.getDataInfo(); //输出classVar3中的长和宽
getchar();
}
运行结果
Length = 30 width = 20
可重载运算符

不可重载运算符
成员访问运算符(.)、成员指针访问运算符(.* ->*)、域运算符(::)、长度运算符(sizeof)、条件运算符(?:)、预处理符号(#)。
更多《计算机视觉与图形学》知识,可关注下方公众号:

本文详细介绍了C++中的函数重载与运算符重载,包括如何通过参数类型和数量的不同来区分同名函数,以及如何使用关键字operator重载特定的运算符。通过实例演示了不同类型参数的函数调用和自定义类的运算符重载过程。
5842

被折叠的 条评论
为什么被折叠?



