1. 运算符重载
除了 : . * :: sizeof 这些运算符不能重载外,其他的运算符都能重载
运算符的重载一般用成员函数或是友元函数来重载
一般形式为:函数类型 operator 运算符 (形参表);
双目运算符,就是两个运算数。单目运算符,如“++”,一般是无参调用。
若想返回本身,用 return *this; 注:只能用于成员函数,友元函数没有this。
在单目运算符中,如 ++, 存在着前置(++a), 和后置(a++), 前置和后置是相对于运算符“++”的位置而言。
为了区别这两种情况,对于前置的“++”,不用形参,后置的“++”,则用一个int型形参以示区别,
int仅仅表示区别而已,丝毫没有其他意思。运算符重载,说到底也就是一个成员函数而已。
成员函数实现单目运算符,测试代码:
#includeusing 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++"<
v++;
r++;
return t;
}
int main()
{
A a(10,20);
A b = ++a;
b.show();
a.show();
return 0;
}
2. 用友元函数实现运算符重载
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)