重载运算符
好处:使用用户自定义数据以一种更简洁的方式工作(套话 套话)在我看来重载运算符为的是让原本的一系列运算符+-*=()等,在自定义类中可以使用,来更方便的编写程序。
首先我们先了解一下不能重载的运算符
. :: ?: .* 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模板中的各种容器都非常好用,工作效率高,调用方便,应该在我们的代码中多使用。