C/C++ 初学简单笔记 ―4.1― 多态性 运算符重载

2014-11-24 07:55:13 · 作者: · 浏览: 0

1. 运算符重载

除了 : . * :: sizeof 这些运算符不能重载外,其他的运算符都能重载

运算符的重载一般用成员函数或是友元函数来重载

一般形式为:函数类型 operator 运算符 (形参表);


双目运算符,就是两个运算数。单目运算符,如“++”,一般是无参调用。

若想返回本身,用 return *this; 注:只能用于成员函数,友元函数没有this。

在单目运算符中,如 ++, 存在着前置(++a), 和后置(a++), 前置和后置是相对于运算符“++”的位置而言。

为了区别这两种情况,对于前置的“++”,不用形参,后置的“++”,则用一个int型形参以示区别,

int仅仅表示区别而已,丝毫没有其他意思。运算符重载,说到底也就是一个成员函数而已。


成员函数实现单目运算符,测试代码:

#include

using namespace std;

class A

{
private:
int r;
int v;
public:
A(){};
A(int r, int v):r(r),v(v){};
virtual ~A(){};
void show()
{
cout<<"r "< }
A operator ++(); // ++i
A operator ++(int); // i++
};
A A::operator ++()
{
v++;
r++;
return *this;
}

A A::operator ++(int)
{
// i++
cout<<"i++"< A t = *this;
v++;
r++;
return t;
}
int main()
{
A a(10,20);
A b = ++a;
b.show();
a.show();

return 0;

}


2. 用友元函数实现运算符重载

实现“+=”运算符重载时,建议左形参应采用别名传递,而返回值也是左形参的别名。


#include
using namespace std;

class Complex
{
private:
double real;
double image;
public:
Complex(){};
Complex(int r, int i):real(r),image(i){};
virtual ~Complex(){};
void show(){
cout<<"real="<
<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)