對c 中過載的理解(詳細些)

2022-02-17 00:40:05 字數 1408 閱讀 1999

1樓:

//樓上的回答的很好,但沒有解答重點.

complex complex::operator +(complex c2) //這步不是很理解

/*「+」 ,」-」是雙目運算子,為什麼在程式中的過載函式中只有乙個引數呢?實際上,運算子過載函式有兩個引數,由於過載函式是complex類中的成員函式,有乙個引數是隱含的,運算子函式是用this指標隱式地訪問類物件的成員。

可以看到,過載函式operator+訪問了兩個物件中的成員,乙個是this指標指向的物件中的成員,乙個是形參物件中的成員。如this->real+c2.real,this->real就是c1.

real。

在將運算子函式過載為成員函式後,如果出現含該運算子的表示式,如c1+c2,編譯系統把它解釋為c1.operator+(c2)

即通過物件c1呼叫運算子過載函式,並以表示式中第二個引數(運算子右側的類物件c2)作為函式實參。運算子過載函式的返回值是complex型別,返回值是複數c1和c2之和(complex(c1.real + c2.

real,c1.imag+c2.imag))。

*///可參考:

2樓:匿名使用者

complex complex::operator +(complex c2) //這步不是很理解

函式最好寫成complex complex::operator+(const complex& c2)

這個函式返回乙個complex的物件,過載的運算子是"+","+"的左邊是物件本身,右邊是另外乙個物件,返回值也是乙個物件

return語句通過呼叫complex的建構函式返回乙個complex的物件

complex c1(5,4),c2(2,10),c3;

c3=c1+c2;

這2句,c1(5,4),c2(2,10)分別呼叫了建構函式c1.complex(5,4)和c2.complex(2,10),c3呼叫了c3.complex(0,0);

c3=c1+c2右邊呼叫了c1.operator+(c2),因此函式體中參與運算的是c1和c2的引用(修改以後的版本),然後通過建構函式complex()返回乙個complex物件,並且賦值給c3(賦值的過程中使用了預設複製建構函式,預設複製建構函式可以通過過載"="來自定義)

引數用const complex& c2而不用complex c2的原因:

1.2個都是可以的,但前者更好

2.後者是物件實參作為引數,在呼叫的時候需要複製乙個c2的副本參與函式體運算,如果c2比較複雜的話,將會增加額外的系統開銷

3.前者是乙個物件的引用,呼叫的時候不會複製c2的副本,所以不產生額外的開銷

4.為了保證c2不被意外改變,而且我們也不需要改變它,所以定義成const

c中函式過載的原則是什麼啊,C中函式過載有啥用?

函式過載的定義 函式過載是指在同一作用域內,可以有一組具有相同函式名,不同引數列表的函式,這組函式被稱為過載函式。所以原則就是相同的函式名,不同的引數列表。返回值不能作為過載依據。c 中函式過載的原則是什麼啊?函式過載的定義 函式過載是指在同一作用域內,可以有一組具有相同函式名,不同引數列表的函式,...

C 運算子過載中過載為類的成員函式和過載為類的友元函式

友元函式 bai 具有與du類成員函式相同訪問zhi權利的 非dao成員函式 他可以訪問類專的私有和保護成員屬 通過該類物件 物件指標或其引用。簡單且一般的說 運算子過載為類的成員函式,他的引數個數會比 該運算子的操作符 少一,而運算子過載為友元函式時,他的引數與其操作個數是相同的。友員函式是指來在...

C中過載賦值建構函式的問題,C複製建構函式和號過載問題

賦值運bai算符和複製建構函式都 du是用已存zhi在的b物件來建立另dao乙個物件a。不同之回處在於答 c 複製建構函式和 號過載問題 表述基本上沒有問bai題。從功能上來du說,建構函式是用於建立zhi物件的dao,operator其實是可以看成普通內的成員函式,只不容 過是以符號的形式代替文字...