日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

关于c++中运算符重载

發(fā)布時間:2024/4/17 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于c++中运算符重载 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

通俗的講,運算符重載就是把運算符賦予新的功能,比如說 + 有整數(shù)相加 浮點數(shù)相加的功能,但是沒有復(fù)數(shù)相加的功能,這時我們通過運算符重載,使得 + 具有復(fù)數(shù)相加的功能,這就叫做運算符重載,本質(zhì)上, 運算符重載是函數(shù)的重載。

?

重載運算符使具有特殊名稱的函數(shù), 形式如下:

1 返回類型 operator運算符號(形式參數(shù)列表) 2 { 3 函數(shù)體 4 }

1 operator后接需要重載的運算符, 成為運算符函數(shù)。

2 運算符函數(shù)的函數(shù)名就是“ operator運算符號” ?//operator+ ?是函數(shù)名

?

下面通過設(shè)計一個復(fù)數(shù)類實現(xiàn) + 的重載

?

1 #include <iostream> 2 using namespace std; 3 class complex //復(fù)數(shù)類 4 { 5 public: 6 complex(double r=0.0,double i=0.0)//構(gòu)造函數(shù) {real=r; imag=i; } 7 complex operator +(complex &c2); //重載+運算符 8 complex operator -(complex &c2); //重載-運算符 9 void display() 10 { 11 cout<<real<<"+"<<imag<<"i"<<endl; 12 } 13 private: 14 double real; //實部 15 double imag; //虛部 16 }; complex complex::operator +(complex &c2) 18 { complex c; 20 c.real=c2.real+real; 21 c.imag=c2.imag+imag; 22 return c; 23 } 24 complex complex::operator -(complex &c2) 25 { complex c; 27 c.real=real-c2.real; //順序不能顛倒 28 c.imag=imag-c2.imag; 29 return c; 30 } 31 int main() 32 { complex c1(1,2),c2(3,4),c3; 34 c3=c2+c1; c3.display(); //輸出4+6i 36 c3=c2-c1; c3.display(); //輸出2+2i 38 return 0; 39 }

只有類的普通成員函數(shù)才有this指針 類的有元函數(shù) 靜態(tài)成員函數(shù)都是沒有this指針的

?

?

當(dāng)運算符重載為友元函數(shù)時, 運算符函數(shù)的形式參數(shù)的個數(shù)和運算符規(guī)定的運算對象個數(shù)一致 一般我們也是采用這種方式

形式如下:

class 類名{ //類體
……
//友元聲明
friend 返回類型 operator 運算符號(形式參數(shù)列表);
};
返回類型 operator 運算符號(形式參數(shù)列表)
{
函數(shù)體
}

還是以 + - 運算符為例

1 #include <iostream> 2 using namespace std; 3 class complex //復(fù)數(shù)類 4 { 5 public: 6 complex(double r=0.0,double i=0.0) {real=r; imag=i;}//構(gòu)造函數(shù) 7 friend complex operator +(const complex &c1,const complex &c2); //重載+運算符 8 friend complex operator -(const complex &c1,const complex &c2); //重載-運算符 9 void display() 10 { cout<<real<<"+"<<imag<<"i"<<endl; } 11 private: 12 double real; //實部 13 double imag; //虛部 14 }; 15 complex operator +(const complex &c1,const complex &c2) 16 { complex c3; 17 c3.real=c1.real+c2.real; 18 c3.imag=c1.imag+c2.imag; 19 return c3; 20 } 21 complex operator -(const complex &c1,const complex &c2) 22 { complex c3; 23 c3.real=c1.real-c2.real; 24 c3.imag=c1.imag-c2.imag; 25 return c3; 26 } 27 int main() 28 { complex c1(1,2),c2(3,4),c3; 29 c3=c2+c1; c3.display(); //輸出4+6i 30 c3=c2-c1; c3.display(); //輸出2+2i 31 return 0; 32 }

?

?

重載運算符的規(guī)則
?( 1) C++絕大部分的運算符可以重載, 不能重載的運算符有:. .* :: ?: sizeof
?( 2) 不能改變運算符的優(yōu)先級、 結(jié)合型和運算對象數(shù)目。
?( 3) 運算符重載函數(shù)不能使用默認(rèn)參數(shù)。
?( 4) 重載運算符必須具有一個類對象( 或類對象的引用) 的參數(shù),不能全部是C++的內(nèi)置數(shù)據(jù)類型。

?( 5) 一般若運算結(jié)果作為左值則返回類型為引用類型; 若運算結(jié)果要作為右值, 則返回對象。

?( 6) 重載運算符的功能應(yīng)該與原來的功能一致。

?

轉(zhuǎn)載于:https://www.cnblogs.com/tiantiantian-dianzi/p/5625438.html

總結(jié)

以上是生活随笔為你收集整理的关于c++中运算符重载的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。