重载运算符中的const_C/C++语言学习笔记(7)函数和类的运算符重载

文件规范

接着第五章的内容讲类。

在第五章里面,其实把很多东西放在了一个文件夹里面,这很不好。

一般的习惯是把这个文件拆成三份:声明(declaration),实现(implemenation)和main函数部分。

值得注意的是声明和实现部分必须是.h头文件,不要是.cpp的源代码。

强烈不建议在.h当中using namespace std; ,而是用using std::cout; 之类的方法。但是具体的原因......我也不是很清楚。希望清楚原因的读者在下面留言。

类的声明部分,仅包括函数原型。除非函数是空定义(如析构函数),否则不给出实现。

类的实现部分则补全所有类成员函数的实现。

main.cpp包含前面的头文件,然后仅包含一个main函数。

所以我们改一下第五章的那个student类:

student0.h(声明部分):

#ifndef STUDENT_H_

student.h(实现部分):

#include

main.cpp:

#include

函数重载与运算符重载

对于一个类的两个对象,有的时候我们会希望它们能够进行某种操作,比如,定义类的加法。这种时候希望可以写成

对象1+对象2

的形式。这就需要对+运算符进行重载。

在讲运算符重载之前先讲函数的重载。

在C++中,即使在一个名称空间中,也允许出现同样的函数名,但是这是有条件的。

符合下面两条的任何一条即可:

i). 两个函数的参数个数不同
ii). 虽然两个函数的参数个数相同,但参数类型不是一一对应相同的

注意两点。

第一,函数参数的类型,不包括引用的差异和const的差异。比如说,int和int&算同一类型,const char 和char也视为同一种类型。

第二,函数返回值类型不同,但是参数类型对应相同,仍然是不符合要求的,不能重载。

例如下面的例子重载了max函数,使之可以接受两个或三个参数:

#include

运行结果是:

4
6

运算符其实也可以看成一种函数。比如说,

a+b等价于 operator+(a,b)

a=b等价于 operator=(a,b)

当然不能直接这样运行。但是确实有一个叫做operator的指令,事实上可以做到这一点:

利用operator+作函数名,定义好operator+(a,b)以后,可以使用a+b来代替operator+(a,b)的语句,a+b返回operator+(a,b)的返回值。

在类当中,如果operator+是某个类成员函数,则可以定义operator+(a)函数。然后设m是一个对象,

m.operator+(a)就可以写成

m+a

的语句格式。

下一章我们将举出一个具体的例子:实现一个表示时间的简单的类,然后利用运算符重载实现时间的加减和数乘。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值