一, 运算符重载
1,重载运算符的限制:
重载运算符函数可以对运算符做出新的解释,但原有基本语义不变:
·不改变运算符的优先级
·不改变运算符的结合性
·不改变运算符所需要的操作数
·不能创建新的运算符
2、重载运算符的具体格式
class X {
//…
返回类型 operator运算符(形参表);
//…
}
在类外定义成员运算符函数的格式如下:
返回类型 X::operator运算符(形参表)
{
函数体
}
using namespace std;
class printData
{
public:
void print(int i)
{cout<<"整数为:"<
void print(double f)
{cout<<"浮点数为:"<
void print(string c)
{cout<<"字符串为"<
};
int main(void)
{
printData pd;
//输出整数
pd.print(5);
//输出浮点数
pd.print(500.263);
//输出字符串
pd.print("Hello C++");
return 0;
}
当上面的代码被编译和执行时,它会产生下列结果:
整数为:5
浮点数为:500.263
字符串为:Hello C++
3、用成员或友元函数重载运算符
·一元运算符:
Object op 或 op Object
重载为成员函数,解释为:
Object . operator op ()
操作数由对象Object通过this指针隐含传递
重载为友元函数,解释为:
operator op (Object)
操作数由参数表的参数Object提供
·二元运算符:
ObjectL op ObjectR
重载为成员函数,解释为:
ObjectL . operator op ( ObjectR )
左操作数由ObjectL通过this指针传递,右操作数由参数ObjectR传递
重载为友元函数,解释为:
operator op ( ObjectL, ObjectR )
左右操作数都由参数传递
【】运算符用于访问数据对象的元素
重载格式 类型 类::operator[] ( 类型) ;
()运算符用于函数调用
重载格式 类型 类:: operator() ( 参数表 ) ;
几种特殊情况:
(1)运算符【】和()是二元运算符,只能用成员函数重载,不能用友元函数重载。
(2)重载输出(输入)运算符只能用友元函数重载。
(5)用友元函数重载 << 和 >> ,输出和输入用户自定义的数据类型
例:
istream& operator>>(istream& in,class_name& obj)
{
in>>obj.item1;
in>>obj.item2;
. . .
in>>obj.itemn;
return in;
}
ostream& operator<<(ostream& out,class_name& obj)
{
out<
·STL是C++标准程序库的核心,深刻影响了标准程序库的整体结构。
·STL由一些可适应不同需求的集合类(collection class),以及在这些数据集合上操作的算法(algorithm)构成
·STL内的所有组件都由模板(template)构成,其元素可以是任意类型。
·STL是所有C++编译器和所有操作系统平台都支持的一种库。
vector
vec.begin()//指向迭代器中第一个元素。
vec.end()//指向迭代器中末端元素的下一个,指向一个不存在元素。
vec.push_back(elem) //在尾部加入一个数据。
vec.pop_back() //删除最后一个数据。
vec.capacity() //vector可用空间的大小。
vec.size()//返回容器中数据个数。
vec.empty() //判断容器是否为空。
vec.front() //传回第一个数据。
vec.back() //传回最后一个数据,不检查这个数据是否存在。
vec.at(index) //传回索引idx所指的数据,如果idx越界,抛出out_of_range。
vec.clear() //移除容器中所有数据。
vec.erase(iterator) //删除pos位置的数据,传回下一个数据的位置。
vec.erase(begin,end) //删除[beg,end)区间的数据,传回下一个数据的位置。注意:begin和end为iterator
vec.insert(position,elem) //在pos位置插入一个elem拷贝,传回新数据位置。
vec.insert(position,n,elem) //在pos位置插入n个elem数据,无返回值。
vec.insert(position,begin,end) //在pos位置插入在[beg,end)区间的数据,无返回值。
map
重载运算符的存在实现了c++某些函数功能的合并,使得程序的编写和运行更加有效率,伴随着的是难度的提升,需要更多的课下时间来加以练习