過載運算子與STL總結

2021-08-20 06:48:19 字數 4935 閱讀 9141

運算子過載

1.用成員函式過載運算子

class x

例如(過載+使複數相加)

#include using namespace std;

class complex//複數類

//定義初始化表初始化complex類

complex(double r, double i):real(r),imag(i){}

//宣告成員函式,實現複數相加

complex complex_add(complex &c1);

void display( );//顯示複數

private:

double real;//複數的實部

double imag;//複數的虛部

};//實現複數相加

complex complex::complex_add(complex &c1) // 第乙個complex是指返回型別。

void complex::display( )//顯示複數

3.注意過載運算子後,不改變其原來的功能。不改變運算子的優先級別。

4.對運算子過載的函式有兩種處理方式(1)把運算子過載的函式作為類的成員函式;(2)運算子過載的函式不是類的成員函式,在類中把它宣告為友元函式。

#include using namespace std;

class complex//複數類

complex(double r, double i):real(r),imag(i){}

friend complex operator +(complex &c1,complex &c2); //在類中宣告友元函式。

void display( );

private:

double real;

double imag;

}; complex operator +(complex &c1,complex &c2);

void complex::display( )

time()

friend bool operator<(time t1,time t2)

else if(t1.getmonth()<=t2.getmonth())

return 0;

}

這是對時間的比較。

6.過載單目運算子

例如:

#includeusing namespace std;

class time

time(int m,int s):minute(m),sec(s){}

time operator++(); // 宣告前置自增運算子「++」過載函式

time operator++(int); //宣告後置自增運算子「++」過載函式

void display()

return *this; //返回自加後的當前物件

}time time::operator++(int)

return temp; // 返回自增前的物件

}int main()

friend ostream&operator<<(ostream&out,time&);//需要先在類中宣告

ostream&operator<<(ostream&out,time&date)

cout << "size: " << a.size() << endl;

a.pop_back();      //移除最後乙個元素。

a[0] = 1;

cout << "size: " << a.size() << endl;

for (int i = 0; i < (int)a.size(); ++i)

cout << endl;

sort(a.begin(), a.end());    //公升序排列

cout << "size: " << a.size() << endl;

for (int i = 0; i < (int)a.size(); ++i)

cout << endl;

a.clear();

cout << "size: " << a.size() << endl;

return 0;

}2. map/multimap

count(key)  返回鍵值等於key的元素個數。

find(key) 返回鍵值等於key的第乙個元素。

lower_bound(key) 返回鍵值大於key的第乙個元素

upper_bound(key)返回鍵值大於key的第乙個元素。

equal_range(key)  返回鍵值等於key的元素區間。

下面用乙個**介紹multimap

#include

#include

#include

using namespace std;

int main()

cout << "count: " << mm1.count("b") << endl;

cout << "bound: " << endl;

p1 = mm1.lower_bound("b");

p2 = mm1.upper_bound("b");

for(mm1i = p1; mm1i != p2; mm1i++)

return 0;

}3.count_if 演算法計算中的元素範圍 [first, last) 導致返回 true,謂詞的數量,並返回的謂詞是真正的元素數。比count更靈活。

同理find_if 也一樣。

下面給大家乙個自己用stl寫的程式

#include#include#include#include#include#includeusing namespace std;

class time

time()

friend bool operator<(time t1,time t2)

else if(t1.getmonth()<=t2.getmonth())

return 0;

} friend istream&operator>>(istream&is,time&);

friend ostream&operator<<(ostream&out,time&);

int getmonth()

int getday()

int gethour()

int getminute()

void setmonth(int d)

void setday(int h)

void sethour(int g)

void setminute(int j)

}; istream&operator>>(istream&is,time&date)

ostream&operator<<(ostream&out,time&date)

string getzuozhe()

string getshuhao()

time getchuban()

int getceshu()

};istream&operator>>(istream&is,book&r)

ostream&operator<<(ostream&out,book&r)

string getzuozhe()

string getshuhao()

string getxuehao()

time getchuban()

time getstart()

time getend()

};istream&operator>>(istream&is,record&r)

ostream&operator<<(ostream&out,record&r)

userop()

friend istream&operator>>(istream&is,userop&u)

friend ostream&operator<<(ostream&out,userop&u) }

void userop::addrecord()

}i=r.size();

m1.insert(make_pair(p.getshuming(),i-1));

m2.insert(make_pair(p.getshuhao(),i-1));

}}void userop::shangjia(book h)

int userop::serchbook(string s)

}void userop::xiajia(string s)

void userop::serchbyshuming(string s)

} int main()

{ /*vectorb;

vector::iterator it;

multimapb1;//書名

multimap::iterator mit;

vectorr;

vector::iterator itt;

multimapm1;//書名

multimap::iterator mit1;

multimapm2;//書號

multimap::iterator mit2;*/

userop u;

cin>>u;

u.addbook();

u.addrecord();

cout<

最後給大家分享一下心得。

首先,運算子過載是很重要的,很有實用意義,豐富了類的功能和適用範圍,過載時一般都是基於原來的功能進行延伸不能太違背原來的意思,比如

把加號過載成小於號用。過載一次一勞永逸,為下面節省很多,而且使程式更清晰。stl 使是以模板為基礎的乙個標準庫,使c++的重要的一部分。

它非常有實用性,運用stl能使**更簡潔。我們要對stl各種容器及其特有的一些功能都要了解,用的時候也便於查詢。



STL 過載運算子

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

C 課程總結 過載運算子 STL

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

過載運算子總結

基本知識點 不可過載的算符 sizeof 可過載的運算子 等 過載運算子的限制 不改變運算子的優先順序 不改變運算子的結合性 不改變運算子所需要的運算元 不能改變新的運算子 可對運算子作出新的解釋,原有的基本語義不變 運算子函式可過載為成員函式和友元函式 一元運算子 過載成員函式 object.op...