运算符重载与STL容器

运算符重载

C++允许运算符重载,但并不是所有的运算符都支持重载

不能重载的运算符:

.   .*  ::  ?:  sizeof

运算符重载后,原有的基本语义不变

1.不改变运算符的优先级

2.不改变运算符的组合性

3.不改变运算符所需要的操作数

语法形式

类型 类名::operator op(参数表)

{

//相对于该类定义的操作

}

例程:

三维坐标类

class TriCoor

{

public:

   TriCoor(int mx=0,int my=0,int mz=0);

   TriCoor operator+(TriCoor t);

   TriCoor&  operator++();

   TriCoor& operator=(Tricoor t);

private:

   int x,y,z;

};

TriCoor::TriCoor(int mx,int my,int mz)

{

x=mx;y=my;z=mz;

}

TriCoor TriCoor::operator+(TriCoor t)

{

TriCoor temp;

temp.x=x+t.x;

temp.y=y+t.y;

temp.z=z+t.z;

}

TriCoor TriCoor::operator++()

{

x++;

y++;

z++;

return *this;

}

TriCoor&  TriCoor:: operator=(TriCoor t)

{

x=t.x;

y=t.y;

z=t.z;

return *this;

}

用友元函数重载运算符

例程:

复数计算

class Complex

{

public:

  Complex(double r=0,double i=0);

  Complex(int a);

{Real =a;Image=0;}

friend Complex operator+(const Complex &c1,const Complex &c2);

friend Complex operator-(const Complex &c1,const Complex &c2);

friend Complex operator-(const Complex &c);

private:

double Real,Image;

};

Complex::Complex(double r,double i)

{

Real=r;

Image=i;

}

Complex operator+(const Complex &c1,const Complex &c2)

{

double r=c1.Real+c2.Real;

double i=c1.Image+c2.Image;

return Complex(r,i);

}

Complex operator-(const Complex &c1,const Complex &c2)

{

double r=c1.Real-c2.Real;

double i=c1.Image-c2.Image;

return Complex(r,i);

}

Complex operator-(const Complex &c)

{

return Complex(-c.Real,-c.Image);

}

重载输出流与输入流

class vector

{

public:

    vector(const int*,int);

    friend ostream& operator<<(ostream &os,const vector&);

    friend istream& operator>>(istream &is,vector&);

private:

   int *v;

   int len;

};

 vector::vector(const int* b,int size)

{

v=new int(size);

len=size;

for(int i=0;i

  v[i]=b[i];

}

ostream& operator<<(ostream &os,const vector &v)

{

for (int i=0;i

    os<

return os;

}

istream& operator>>(istream &is,vector &v)

{

for(int i=0;i

    is>>v[i];

return is;

}

STL

STL是C++标准模板库,此处主要介绍其中的向量和map;

vector

初始化:vector<数据类型(可以是用户自定义的类)>  向量的名称

生成迭代器(类似指针,有书籍形象的将其比作标签,用于历遍元素)

迭代器初始化:vector<数据类型(可以是用户自定义的类)> const_iterator 迭代器名称  (只读)

                       vector<数据类型(可以是用户自定义的类)> iterator 迭代器名称  (读、写)

历遍元素:

              设迭代器的名称为 iter

              for (iter = 向量名.begin();iter !=向量名.end();++iter)

vector部分自带函数:

begin()    返回一个迭代器,指向第一个元素

end()   返回一个迭代器,指向最后一个元素之后

insert(pos(迭代器),e)   在pos位置插入e的副本

push_back(e)   在向量末尾插入e的副本

pop_back()   移除最后一个元素

clear()   移除所有元素,清空容器

map/multimap(multimap允许key相同的元素)

格式 map/multimap<类型,类型>  名称

大概是将两个类型绑定到一起

迭代器与vector相似

map部分自带函数(大部分与vector的类似)

make_pair(type1,type2) 向map的末尾插入元素








你可能感兴趣的:(运算符重载与STL容器)