c++函式過載
過載宣告是指乙個與之前已經在該作用域內宣告過的函式或方法具有相同名稱
的宣告,但是它們的引數列表和定義(實現)不相同。
當您呼叫乙個過載函式**時,編譯器通過把您所使用的引數型別與定義中的引數型別進行比較,決定選用最合適的定義。
c++運算子過載
(只有自定義的資料型別才可以實現運算子過載)
幾種方式(成員函式過載 友元函式過載 普通函式過載) 合理選擇~
普通函式過載一般不用吧 如果想訪問類私有資料用友元函式方便
可以重定義或過載大部分c++內建的運算子~
過載的運算子時帶有特殊名稱的函式,函式名由關鍵字operator和其後要過載的運算子符號構成。與其他函式一樣,過載運算子有乙個返回型別和乙個引數列表。
宣告加法運算子用於把兩個 box 物件相加,返回最終的 box 物件。box operator+(
const box&);
operator
+ 返回型別box 引數列表const box&
..
大多數的過載運算子可被定義為普通的非成員函式或者被定義為類成員函式。如果我們定義上面的函式為類的非成員函式,那麼我們需要為每次操作傳遞兩個引數:
box operator+(
const box&
,const box&
);
#include
using
namespace std;
class
boxvoid
setlength
(double len )
void
setbreadth
(double bre )
void
setheight
(double hei )
// 過載 + 運算子,用於把兩個 box 物件相加
box operator+(
const box& b)
private
:double length;
// 長度
double breadth;
// 寬度
double height;
// 高度};
// 程式的主函式
intmain()
以上有部分借鑑於菜鳥網~#include
using
namespace std;
class
boxvoid
setlength
(double len )
void
setbreadth
(double bre )
void
setheight
(double hei )
double length;
// 長度
double breadth;
// 寬度
double height;
// 高度};
// 過載 + 運算子,用於把兩個 box 物件相加
box operator+(
const box& a,
const box& b)
// 程式的主函式
intmain()
自己補充乙個過載+二元運算子的例子
如果想要過載+讓 乙個物件與乙個數字相加,並且不受順序影響,乙個小demo
(<< >>主要適用於輸出輸入內建的資料型別)#include
using
namespace std;
class
test
;test::
test()
test::
test
(int n)
test test::
operator+(
const test& obj)
test test::
operator+(
const
int b)
void test::
show()
test operator+(
const
int b,test obj)
intmain()
(實現物件可以進行輸出 所以覺得一般定義為友元函式合適)
(過載<< >>來操作自定義的資料型別)
運算子過載的函式需要返回乙個ostream物件,其實cout時ostream的乙個輸出流物件。函式第乙個引數ostream &out,在執行**中,只能有乙個cout物件,所以這裡使用引用的方式,保證全域性只有乙個該物件
基本
①(普通函式過載 << >>運算子)ostream&
operator
<<
(ostream& out,
const classtype& obj)
istream&
operator
<<
(istream& in, classtype& obj)
②(使用友元函式過載<< >>)#include
#include
using
namespace std;
class
test
char
*getname()
int&
getage()
//右值:利用排他性定義即可
//必須加上引用符號 getage返回age的引用
//private
:char name[5]
;int age;};
ostream&
operator
<<
(ostream& out,test& t1)
istream&
operator
>>
(istream &in,test & t2)
;int age=0;
in>>name>>age;
//內部實現輸入~
if(in)
else
return in;
}int
main()
(功能是先++再返回 先記錄當前再++)#include
"iostream"
#include
"cmath"
#include
"cstring"
using
namespace std;
class
test
friend ostream&
operator
<<
(ostream &out,
const test &t1)
friend istream&
operator
>>
(istream &in,test& t1)
;int ag=0;
in>>name>>ag;
if(in)
else
return in;
}private
:char name[5]
;int age;};
intmain()
先計算,後賦值: 函式裡面,先++,再返回。返回test的引用,主要是為了h行執行一遍++test後,再執行++(++test),這裡的++test還是原來的test物件,這樣保證操作的是乙個物件~
先賦值,再計算:傳入int佔位符即可。函式裡面,先記錄當前的值,再進行++,返回原先記錄的值,返回不能是引用,因為如果是引用,相當於返回的是tmp的引用,而tmp是乙個區域性變數,在函式執行結束後就會釋放,如果再去訪問t1,發現結果沒變~
#include
using
namespace std;
class
test
//過載++i運算子
//說明這是乙個字首形式
test &
operator++(
)//過載i++運算子
//int在括號裡面是為了向編譯器說明這是乙個字尾形式
test operator++(
int)
private
:int num;};
ostream &
operator
<<
(ostream &cout,test t1)
intmain()
C 運算子過載 過載特殊運算子
賦值運算子用於同類物件間的相互賦值。賦值運算子只能被過載為類的非靜態成員函式,不能過載為友元函式和普通函式。對於使用者自定義的類而言,如果沒有過載賦值運算子,那麼c 編譯器會為該類提供乙個預設的過載賦值運算子成員函式。預設賦值運算子的工作方式是按位對拷,將等到右邊物件的非靜態成員拷貝給等號左邊的物件...
C 運算子過載賦值運算子
自定義類的賦值運算子過載函式的作用與內建賦值運算子的作用類似,但是要要注意的是,它與拷貝建構函式與析構函式一樣,要注意深拷貝淺拷貝的問題,在沒有深拷貝淺拷貝的情況下,如果沒有指定預設的賦值運算子過載函式,那麼系統將會自動提供乙個賦值運算子過載函式。賦值運算子過載函式的定義與其它運算子過載函式的定義是...
C 運算子過載轉換運算子
為什麼需要轉換運算子?大家知道對於內建型別的資料我們可以通過強制轉換符的使用來轉換資料,例如 int 2.1f 自定義類也是型別,那麼自定義類的物件在很多情況下也需要支援此操作,c 提供了轉換運算子過載函式 它使得自定義類物件的強轉換成為可能。轉換運算子的生命方式比較特別,方法如下 operator...