Najlepszy samouczek Funkcja C ++ przeciążenie i przeciążanie operatorów W 2024 r. W tym samouczku możesz dowiedzieć się W C ++ funkcja przeciążenia,W C ++ operatora przeciążanie,Przeciążone operatorzy mogą / nie mogą być przeciążone operatory,Przykłady przeciążenia operatora,
C ++ pozwala jedną zfunkcji i operatoróww tym samym zakresie, aby określić więcej niż jedną definicję, jest wywoływanafunkcja przeciążeniaiprzeciążanie operatorów.
Przeciążone stwierdzenie to taki, który został ogłoszony w tym zakresie przed deklaracje funkcji lub metody mają taką samą nazwę, ale ich lista parametrów i definicji (realizacja) nie są takie same.
Podczas wywoływaniafunkcji przeciążony lub przeciążony operator,kompilator przez typ parametru, którego używasz, typ i określenie parametrów w porównaniu do decydować o wyborze najbardziej odpowiedniej definicji. Wybierz najbardziej odpowiednią funkcję przeciążony lub proces przeciążanie operatorów, zwanyrozdzielczości przeciążenia.
W tym samym zakresie, można zadeklarować kilka funkcji podobną funkcję o tej samej nazwie, ale te formalne parametry (liczba odnosi się do typu parametru lub kolejno) funkcji o tej samej nazwie musi być inna. Można nie tylko przez powrót do różnych typów przeciążonych funkcji.
Poniższe przykłady, taka sama jak nazwa funkcjiprint () jest używana do różnych typów danych wyjściowych:
#include <iostream> using namespace std; class printData { public: void print(int i) { cout << "Printing int: " << i << endl; } void print(double f) { cout << "Printing float: " << f << endl; } void print(char* c) { cout << "Printing character: " << c << endl; } }; int main(void) { printData pd; // Call print to print integer pd.print(5); // Call print to print float pd.print(500.263); // Call print to print character pd.print("Hello C++"); return 0; }
Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:
Printing int: 5 Printing float: 500.263 Printing character: Hello C++
Można zmienić lub zastąpić większość C ++ wbudowanych operatorów. To pozwala na użycie niestandardowych typów operatorów.
Operator jest przeciążony ze szczególnym nazwa funkcji, nazwa funkcji następuje przez głównego operatora i operatora, aby zastąpić symbole. I inne funkcje, przeciążone operatory mają typ zwracany oraz listę parametrów.
Box operator+(const Box&);
Oświadczenie operator dodawania do dwóch obiektów Box dodaje, ostateczny zwrot obiektów Box. Najbardziej przeciążone operatorzy mogą być określone jako normalne lub trzecimi funkcje są zdefiniowane jako funkcje członkiem klasy. Jeśli zdefiniujemy powyższą funkcję jak klasach czynnościowych niebędącego państwem, to musimy zdać dwa parametry dla każdej operacji w następujący sposób:
Box operator+(const Box&, const Box&);
Poniższy przykład ilustruje funkcję składową przeciążanie operatorów koncepcji. Tutaj, obiekt przekazany jako parametr, właściwości obiektu za pomocątego operatora można uzyskać w następujący sposób:
#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; }
Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:
Volume of Box1 : 210 Volume of Box2 : 1560 Volume of Box3 : 5400
Poniżej znajduje się lista operatorów może być przeciążony:
+ | - | * | / | % | ^ |
& | | | ~ | ! | , | = |
< | > | <= | >= | ++ | -- |
<< | >> | == | != | && | || |
+= | -= | /= | %= | ^= | &= |
|= | *= | <<= | >>= | [] | () |
-> | ->* | new | new [] | delete | delete [] |
Poniżej znajduje się lista operatorów nie może być przeciążony:
:: | .* | . | ?: |
Poniżej przedstawiono szereg przykładów operatora przeciążenia, które pomogą Ci lepiej zrozumieć pojęcie przeciążenia.
序号 | 运算符和实例 |
---|---|
1 | 一元运算符重载 |
2 | 二元运算符重载 |
3 | 关系运算符重载 |
4 | 输入/输出运算符重载 |
5 | ++ 和 -- 运算符重载 |
6 | 赋值运算符重载 |
7 | 函数调用运算符 () 重载 |
8 | 下标运算符 [] 重载 |
9 | 类成员访问运算符 -> 重载 |