C++中的运算符重载函数基础及其值返回状态(一)

2014-11-24 13:16:23 · 作者: · 浏览: 17
 运算符重载是C++的重要组成部分,它可以让程序更加的简单易懂,简单的运算符使用可以使复杂函数的理解更直观。

  对于普通对象来说我们很自然的会频繁使用算数运算符让他们参与计算,但是对于自定义类的对象来说,我们是无论如何也不能阻止写出像下面的代码一样的程序来的。

例子如下:

 C++ 代码
class Test
{
//过程省略
}

int main()
{
Test a,c;
c=a+a;
}


  当然这样的代码是不能够通过编译的,c++对自定类的算术运算部分保留给了程序员,这也是符合c++灵活特性的。
  在c++中要想实现这样的运算就必须自定义 运算符重载函数,让它来完整具体工作。
   在这里要提醒读者的是,自定义类的运算符重载函数也是函数,你重载的一切运算符不会因为是你自己定义的就改变其运算的优先级,自定义运算符的运算优先级同样遵循与内部运算符一样的顺序。
  除此之外,c++也规定了一些运算符不能够自定义重载,例如.、::等等。 


  上表是在C++中允许重载的运算符总表

  下面我们来学习如何重载运算符,运算符重载函数的形式是:

返回类型 operator 运算符符号 (参数说明)
{
//函数体的内部实现
}

  运算符重载函数的使用主要分为两种形式, 一种是作为类的友元函数进行使用另一种则是作为类的成员函数进行使用

下面我们先看一下作为类的友元函数使用的例子:

 C++ 代码

//程序作者:管宁
//站点:www.cndev-lab.com
//所有稿件均有版权,如要转载,请务必著名出处和作者

#include <iostream>
using namespace std;

class Test
{
public:
Test(int a = 0)
{
Test::a = a;
}
friend Test operator +(Test&,Test&);
friend Test& operator ++(Test&);
public:
int a;
};
Test operator +(Test& temp1,Test& temp2)//+运算符重载函数
{
//cout<
Test result(temp1.a+temp2.a);
return result;
}
Test& operator ++(Test& temp)//++运算符重载函数
{
temp.a++;
return temp;
}
int main()
{
Test a(100);
Test c=a+a;
cout< c++;
cout< system("pause");
}


  在例子中,我们对于自定义类Test来说,重载了加运算符与自动递增运算符,重载的运算符完成了同类型对象的加运算和递增运算过程。

  重载运算符函数返回类型和形式参数也是根据需要量进行调整的,下面我们来看一下修改后的加运算符重载函数。

代码如下:

 C++ 代码

//程序作者:管宁
//站点:www.cndev-lab.com
//所有稿件均有版权,如要转载,请务必著名出处和作者

#include <iostream>
using namespace std;

class Test
{
public:
Test(int a = 0)
{
Test::a = a;
}
friend Test operator +(Test&,const int&);
public:
int a;
};
Test operator +(Test& temp1,const int& temp2)//+运算符重载函数
{
Test result(temp1.a * temp2);
return result;
}
int main()
{
Test a(100);
Test c = a + 10;
cout< syste <script type="text/java script">
<script type="text/java script">BAIDU_CLB_fillSlot("771048");
点击复制链接 与好友分享! 回本站首页
<script> function copyToClipBoard(){ var clipBoardContent=document.title + '\r\n' + document.location; clipBoardContent+='\r\n'; window.clipboardData.setData("Text",clipBoardContent); alert("恭喜您!复制成功"); }
分享到: 更多
<script type="text/java script" id="bdshare_js" data="type=tools&uid=12732"> <script type="text/java script" id="bdshell_js"> <script type="text/java script"> var bds_config = {'snsKey':{'tsina':'2386826374','tqq':'5e544a8fdea646c5a5f3967871346eb8'}}; document.getElementById("bdshell_js").src = "http://bdimg.share.baidu.com/static/js/shell_v2.js cdnversion=" + Math.ceil(new Date()/3600000)
您对本文章有什么意见或着疑问吗?请到 论坛讨论您的关注和建议是我们前行的参考和动力
上一篇: C++类的继承与多重继承的访问控制
下一篇: 对C++递增(增量)运算符重载的思考
相关文章
<script type="text/java script">BAIDU_CLB_fillSlot("182716");
<script type="text/java script">BAIDU_CLB_fillSlot("517916");
图文推荐
<iframe src="http://www.2cto