参考链接
重载操作
重载操作分为重载运算和重载函数。
重载函数
在同一个作用域内,可以声明几个功能类似的同名函数,但是这些形式参数(参数个数、数据类型或者顺序)不同。不能通过返回类型来重载函数。
#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)、条件运算符(?:)、预处理符号(#)。
更多《计算机视觉与图形学》知识,可关注下方公众号: