重载运算符
好处:使用用户自定义数据以一种更简洁的方式工作(套话 套话)在我看来重载运算符为的是让原本的一系列运算符+-*=()等,在自定义类中可以使用,来更方便的编写程序。
首先我们先了解一下不能重载的运算符
. :: ?: .* sizeof //很不可思议的是sizeof竟然是运算符
然后还是来看一下重载运算符的实例
单目运算符(以Time为例)
//重载++ //前置 Time::operator++() { sec++; if(sec>=60) {sec=0;minute++;} return *this; }
//后置 Time::operator++(int) //此处为虚参数 { Time temp(*this); //创建temp sec++; if(sec>=60) {sec-=60; ++minute; } return temp; //注意返回的是之前的值 }
双目运算符重载(+)
class m_complex { public: m_complex(){real=0;imag=0;} m_complex(double r,double i){real=r;imag=i;} m_complex(m_complex const &c1){real=c1.real;imag=c1.imag;} friend m_complex operator+(m_complex &c1,m_complex &c2); void display(){cout<<real<<" "<<imag;} private: double real; double imag; }; m_complex operator+(m_complex &c1,m_complex &c2) { return m_complex(c1.real+c2.real,c1.imag+c2.imag); } int main() { m_complex c1(2,1),c2(3,2),c3; c3=c1+c2; c3.display(); }
这两种重载一个使用了友元函数一个使用了成员函数。
友元函数重载两边可以是不同类型数据,而成员函数第一个数据必须是当前类对象。
所以说重载输出<<用友元函数重载
friend ostream& operator<<(ostream &os,m_complex &c1); ostream& operator<<(ostream &os,m_complex &c1) { os<<c1.real<<" "<<c1.imag; }
这些重载运算符大大方便了我们的代码编译工作。
tip:大于小于比较一般重载一个就行,使用map的时候要有能让map能排序的方案 。
STL模板
STL模板是C++自带的一些好用的类 ,比如说vector,map,multimap,set,multiset等
STL模板有三大部分,一是容器,二是迭代器,三是算法。
容器就是放数据的,此时放数据有一定规律,规则。
迭代器相当于指针,指向容器中放的数据,可以遍历容器中所有数据。
算法就是各种解决问题的高效方案。
现阶段我们常用容器一般是vector,multimap
容器的申请一般需要指明容器内存放的数据类型(分配空间)
#include<vector> using namespace std; int main() { vector<int> v1; vector<int>::iterator it; //用法基本与数组一致 v1.push_back(int); //压入数据 for(it=v1.begin();it!=v1.end();v1++) //循环遍历 }
#include<multimap> using namespace std; int main() { multimap<string,int> m1; //前面的为关键字,后面为存储数据,调用first,second multimap<string,int>::iterator it; m1.insert(make_pair(string,int)); //这样充入数据 for(it=m1.begin();it!=m1.end();it++) cout<<m1->first; //输出关键字是有一定顺序的 }
这些容器中还有许多函数,用的时候需要自行查阅。
STL模板中的各种容器都非常好用,工作效率高,调用方便,应该在我们的代码中多使用。