C++ 运算符重载和函数重载


C++ 允许在同一作用域中的某个函数运算符指定多个定义,分别称为函数重载运算符重载

重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同。


函数重载

在同一个作用域内,可以声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同。不能仅通过返回类型的不同来重载函数。

下面的实例中,同名函数 print() 被用于输出不同的数据类型:

#include <iostream>
using namespace std; class printData
{
public:
void print(int i) {
cout << "整数为: " << i << endl;
} void print(double f) {
cout << "浮点数为: " << f << endl;
} void print(char c[]) {
cout << "字符串为: " << c << endl;
}
}; int main(void)
{
printData pd; // 输出整数
pd.print();
// 输出浮点数
pd.print(500.263);
// 输出字符串
char c[] = "Hello C++";
pd.print(c); return ;
}

当上面的代码被编译和执行时,它会产生下列结果:

整数为:
浮点数为: 500.263
字符串为: Hello C++

运算符重载

可以重定义或重载大部分 C++ 内置的运算符。这样,就能使用自定义类型的运算符。

重载的运算符是带有特殊名称的函数,函数名是由关键字 operator 和其后要重载的运算符符号构成的。与其他函数一样,重载运算符有一个返回类型和一个参数列表。

Box operator+(const Box&);

声明加法运算符用于把两个 Box 对象相加,返回最终的 Box 对象。大多数的重载运算符可被定义为普通的非成员函数或者被定义为类成员函数。如果我们定义上面的函数为类的非成员函数,那么我们需要为每次操作传递两个参数,如下所示:

Box operator+(const Box&, const Box&);

下面的实例使用成员函数演示了运算符重载的概念。在这里,对象作为参数进行传递,对象的属性使用 this 运算符进行访问,如下所示:

#include <iostream>
using namespace std; class Box
{
public: double getVolume(void)
{
return length * breadth * height;
}
void setLength( double len )
{
length = len;
} void setBreadth( double bre )
{
breadth = bre;
} void setHeight( double hei )
{
height = hei;
}
// 重载 + 运算符,用于把两个 Box 对象相加
Box operator+(const Box& b)
{
Box box;
box.length = this->length + b.length;
box.breadth = this->breadth + b.breadth;
box.height = this->height + b.height;
return box;
}
private:
double length; // 长度
double breadth; // 宽度
double height; // 高度
};
// 程序的主函数
int main( )
{
Box Box1; // 声明 Box1,类型为 Box
Box Box2; // 声明 Box2,类型为 Box
Box Box3; // 声明 Box3,类型为 Box
double volume = 0.0; // 把体积存储在该变量中 // Box1 详述
Box1.setLength(6.0);
Box1.setBreadth(7.0);
Box1.setHeight(5.0); // Box2 详述
Box2.setLength(12.0);
Box2.setBreadth(13.0);
Box2.setHeight(10.0); // Box1 的体积
volume = Box1.getVolume();
cout << "Volume of Box1 : " << volume <<endl; // Box2 的体积
volume = Box2.getVolume();
cout << "Volume of Box2 : " << volume <<endl; // 把两个对象相加,得到 Box3
Box3 = Box1 + Box2; // Box3 的体积
volume = Box3.getVolume();
cout << "Volume of Box3 : " << volume <<endl; return ;
}

当上面的代码被编译和执行时,它会产生下列结果:

Volume of Box1 :
Volume of Box2 :
Volume of Box3 :

最新文章

  1. 背水一战 Windows 10 (3) - UI: 窗口全屏, 窗口尺寸
  2. 【Ext.Net学习笔记】07:后续
  3. java简单的数据库查询(SQLServer数据库)
  4. [Bhatia.Matrix Analysis.Solutions to Exercises and Problems]ExI.4.6
  5. HTML5中表单元素的formaction属性
  6. C# 该行已经属于还有一个表 的解决方法
  7. AB串
  8. Python中enumerate用法详解
  9. ScalaPB(3): gRPC streaming
  10. 从锅炉工到AI专家(9)
  11. 连接 sqlserver
  12. https openssl http2
  13. luogu P5105 不强制在线的动态快速排序
  14. 十分钟教你使用NoteExpress
  15. js 窗口抖动
  16. sql server中的日期详解使用(convert)
  17. GIS在水利中的应用
  18. 控制图片在latex中的位置
  19. sqlldr加载 数据文件的字段超出最大长度
  20. Mysql设置auto_increment_increment和auto_increment_offset

热门文章

  1. 不可不知的JavaScript 之 JSON对象和JavaScript对象直接量
  2. python实现迭代法求方程组的根
  3. HashMap、Hashtable 以及HashSet
  4. Top 5 Business Messaging Announcements at Facebook F8 2019
  5. 齐治堡垒机ShtermClient-2.1.1命令执行漏洞(CNVD-2019-09593)分析
  6. web赛题3
  7. 关于socket buffer size的调优
  8. JAVA上传文件到数据库
  9. 关于MYSQL安装踩的坑
  10. #内存不够,swap来凑# Linux上创建SWAP文件/分区