運算子過載與STL課程筆記2

2021-08-20 06:47:16 字數 1331 閱讀 9573

通過這段時間對運算子過載和stl標準模板庫的學習,使我對c++這種程式語言又有了些新的認識。

首先,在編寫類程式的過程中,如果某種運算不能實現預期的功能,我們可以通過運算子過載來

重新制定某種運算規則,這在某種程度上可以使

程式更加簡潔,減少程式設計時間,運算子過載的實質

就是對已有的運算子

重新進行定義

,賦予其另一種功能,以適應不同的資料型別,從而實現功能。

其次,我們在定義類時,可以用物件呼叫函式的形式來使用stl標準模板庫規定的一些以類封裝好

的工具,這些工具是由可適應不同需求的集合類以及對這些資料集合的演算法組成,可以滿足不同需要

,是系統自定義的資料型別,不屬於c++基本資料型別,提供了適應更多資料的通用型別,即規定了模板

資料成員的型別可以自己來定義,元素可以是任意型別,沒有限定,這就使得程式設計更加的靈活和

方便,根據自己的需求來新增資料型別。

在使用運算子過載和stl中應該注意的問題

1、在運算子過載時,一定要自定義乙個拷貝建構函式,這樣在過載運算子返回物件副本的時候,

編譯器會自動呼叫拷貝構造

函式,否則會出現結果錯誤。

2、流運算子不能過載為成員函式,只能用友元函式過載,

如果要用成員函式,則會有cout.operator<<(const f& f),

所以這是不可能的.因此只能用友員來實現,operator<<(cout,f) 而cout是ostream型的,因此有以下標準格式.

注意不能加const,因為cout是要改變的,會改變裡的緩衝成員.

ostream& operator<<(ostream& out,class_name& obj)

3、 在類成員函式中過載運算子是不允許返回引用的,會出現「返回區域性變數的位址」警告

4、  強制型別轉換:型別(資料) --> (不必寫返回型別,因為始終與後面的類 型是相同的) operator型別(無形參) 

只能寫成成員函式,不能是友員.

#includeusing namespacestd; 

class a

operator int()

operator bool()

operator char()

}; int main()

5 、stl迭代器失效問題

容器本身是空的,使用迭代器前,需要檢驗迭代器是否有效。

容器本身增刪失效,erase返回的是下乙個迭代器,容器改變了插入刪除了那麼原來的迭代器就很容易失效。

6.stl結構體裡面包含有 stl容器,那麼不能使用memset來初始化

C 課程總結 過載運算子 STL

一 過載運算子 2 知識再梳理 首先,過載運算子一般有兩種形式 第一種用成員函式的形式過載,第二種友元形式過載。友元過載一般比成員函式過載要多乙個引數,成員函式過載會通過this指標隱式傳遞物件本身的引數。一 其中,必須要用友元來過載的有 輸入輸出流過載 基本格式 friend ostream op...

運算子過載和STL

include using namespace std class printdata public void print int i void setlength double len void setbreadth double bre void setheight double hei 過載 ...

STL 過載運算子

過載運算子 為什麼要過載運算子 c 中預定義的運算子的操作物件只能是基本資料型別。但實際上,對於許多使用者自定義型別 例如結構體 也需要類似的運算操作。這時就必須在c 中重新定義這些運算子,賦予已有運算子新的功能,使它能夠用於特定型別執行特定的操作。運算子過載的實質是函式過載,它提供了c 的可擴充套...