C++ 允許在同一作用域中的某個函式和運算子指定多個定義,分別稱為函式多載和運算子多載,
多載宣告是指一個與之前已經在該作用域內宣告過的函式或方法具有相同名稱的宣告,但是它們的引數串列和定義(實作)不相同,
當您呼叫一個多載函式或多載運算子時,編譯器通過把您所使用的引數型別與定義中的引數型別進行比較,決定選用最合適的定義,選擇最合適的多載函式或多載運算子的程序,稱為多載決策,
小編推薦一個學C語言/C++的學習裙【 712,284,705】,無論你是大牛還是小白,是想轉行還是想入行都可以來了解一起進步一起學習!裙內有開發工具,很多干貨和技術資料分享!
C++ 中的函式多載
在同一個作用域內,可以宣告幾個功能類似的同名函式,但是這些同名函式的形式引數(指引數的個數、型別或者順序)必須不同,您不能僅通過回傳型別的不同來多載函式,
下面的實體中,同名函式 print() 被用于輸出不同的資料型別:
#include <iostream>
using namespace std;
class printData
{
public:
void print(int i) {
cout << "整數為: " << i << endl;
}
void print(double f) {
cout << "浮點數為: " << f << endl;
}
void print(char c[]) {
cout << "字串為: " << c << endl;
}
};
int main(void)
{
printData pd;
// 輸出整數
pd.print(5);
// 輸出浮點數
pd.print(500.263);
// 輸出字串
char c[] = "Hello C++";
pd.print(c);
return 0;
}
當上面的代碼被編譯和執行時,它會產生下列結果:
小編推薦一個學C語言/C++的學習裙【 712,284,705】,無論你是大牛還是小白,是想轉行還是想入行都可以來了解一起進步一起學習!裙內有開發工具,很多干貨和技術資料分享!
C++ 中的運算子多載
您可以重定義或多載大部分 C++ 內置的運算子,這樣,您就能使用自定義型別的運算子,
多載的運算子是帶有特殊名稱的函式,函式名是由關鍵字 operator 和其后要多載的運算子符號構成的,與其他函式一樣,多載運算子有一個回傳型別和一個引數串列,
Boxoperator+(constBox&);
宣告加法運算子用于把兩個 Box 物件相加,回傳最終的 Box 物件,大多數的多載運算子可被定義為普通的非成員函式或者被定義為類成員函式,如果我們定義上面的函式為類的非成員函式,那么我們需要為每次操作傳遞兩個引數,如下所示:
Boxoperator+(constBox&,constBox&);
下面的實體使用成員函式演示了運算子多載的概念,在這里,物件作為引數進行傳遞,物件的屬性使用 this 運算子進行訪問,如下所示:
#include <iostream>
using namespace std;
class Box
{
public:
double getVolume(void)
{
return length * breadth * height;
}
void setLength( double len )
{
length = len;
}
void setBreadth( double bre )
{
breadth = bre;
}
void setHeight( double hei )
{
height = hei;
}
// 多載 + 運算子,用于把兩個 Box 物件相加
Box operator+(const Box& b)
{
Box box;
box.length = this->length + b.length;
box.breadth = this->breadth + b.breadth;
box.height = this->height + b.height;
return box;
}
private:
double length; // 長度
double breadth; // 寬度
double height; // 高度
};
// 程式的主函式
int main( )
{
Box Box1; // 宣告 Box1,型別為 Box
Box Box2; // 宣告 Box2,型別為 Box
Box Box3; // 宣告 Box3,型別為 Box
double volume = 0.0; // 把體積存盤在該變數中
// Box1 詳述
Box1.setLength(6.0);
Box1.setBreadth(7.0);
Box1.setHeight(5.0);
// Box2 詳述
Box2.setLength(12.0);
Box2.setBreadth(13.0);
Box2.setHeight(10.0);
// Box1 的體積
volume = Box1.getVolume();
cout << "Volume of Box1 : " << volume <<endl;
// Box2 的體積
volume = Box2.getVolume();
cout << "Volume of Box2 : " << volume <<endl;
// 把兩個物件相加,得到 Box3
Box3 = Box1 + Box2;
// Box3 的體積
volume = Box3.getVolume();
cout << "Volume of Box3 : " << volume <<endl;
return 0;
}
當上面的代碼被編譯和執行時,它會產生下列結果:
小編推薦一個學C語言/C++的學習裙【 712,284,705】,無論你是大牛還是小白,是想轉行還是想入行都可以來了解一起進步一起學習!裙內有開發工具,很多干貨和技術資料分享!
可多載運算子/不可多載運算子
下面是可多載的運算子串列:
下面是不可多載的運算子串列:
- .:成員訪問運算子
- .*, ->*:成員指標訪問運算子
- :::域運算子
- sizeof:長度運算子
- ?::條件運算子
- #:預處理符號
運算子多載實體
下面提供了各種運算子多載的實體,幫助您更好地理解多載的概念,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/245984.html
標籤:其他
