一丶重载运算符
class x{
//...
返回类型 operator 运算符(形参表);
};
返回类型 X:operator 运算符(形参表)
{
函数体;
}
Complex Complex::operator+(Complex &c2)
{ return Complex(real+c2.real,image+c2.image);}
2.对运算符重载的函数有两种处理方式
(1)把运算符重载的函数作为类的成员函数;
(2)运算符重载的函数不是类的成员函数,在类中把它声明为友元函数。
不改变运算符所需要的操作数
不能创建新的运算符
运算符函数可以重载为成员函数或友元函数
Object op 或 op Object
Ø 重载为成员函数,解释为:
Object . operator op()
操作数由对象Object通过this指针隐含传递
Ø重载为友元函数,解释为:
operator op (Object)
操作数由参数表的参数Object提供
●二元运算符
Ø 重载为成员函数,解释为:
ObjectL . operatorop ( ObjectR )
左操作数由ObjectL通过this指针传递,右操作数由参数ObjectR传递
Ø重载为友元函数,解释为:
operator op (ObjectL, ObjectR )
左右操作数都由参数传递
vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。为了可以使用vector,必须在你的头文件中包含下面的代码:#include <vector>构造函数。
用法
vector<T>c 产生空的vector.
vector<T>c1(c2) 产生同类型的才,并复制c2的所有元素。
vector<T>c(n)生成容器为n的vector。
vector<T>c(beg,end)产生一个vector以区间[beg,end]为元素初值、
~vector<T>()销毁所有元素,并释放内存。
c.size()返回元素个数。
c.empty() 判断元素是否为空。
c.max_size() 返回元素最大可能数量。
c.capacity()返回重新分配空间前可容纳的最大元素数量。
c.reserve(n) 扩大容量n。
c1==c2 判断C1是否等于c2.
c1=c2 将c2的全部元素赋值给c1.
c.assign(beg,end) 将区间[beg,end]的元素赋值给c。
c1.swap(c2)将c1和c2 元素互换。
swap(c1,c2) 同上。
at(idx) 返回索引idx所标识的元素的引用。进行越界检查
operator[](idx) 返回索引idx所标识的元素的引用。不进行越界检查
front() 返回第一个元素的引用,不检查元素是否存在。
back()返回最后一个元素的引用,不检查元素是否存在。
rbegin() 返回一个逆向迭代器,指向逆向遍历的第一个元素。
rend() 返回一个逆向迭代器,指向逆向遍历的最后一个元素。
c.insert(pos,e) 在pos位置插入元素e的副本,并返回新元素的位置。
c.insert(pos,n,e) 在pos位置n个元素e的副本。
c.insert(pos,ben,end)在pos位置插入区间[beg,end)内所有元素的副本。
c.push_back() 在尾部添加一个元素e的副本。
c.pop_back() 移除最后一个元素但不返回最后一个元素。
c.erase(pos) 删除pos元素的位置,返回下一个元素的位置。
c.clear()移除所有元素,清空容器。
c.resize(num) 将元素数量改为num(增加函数用defalut构造函数的产生,多余元素被删除。
c.resize(num,e) 将元素数量改为num(增加元素是e的副本)
在我看来,运算符重载是很重要的,很有实用意义,丰富了类的功能和适用范围,重载时一般都是基于原来的功能进行延伸不能太违背原来的意思,重载一次一劳永逸,为下面节省很多,而且使程序更清晰。