運算子過載
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...