运算符重载 把运算符重新定义新的规则,运算符实际上是函数的一种简化形式,几乎所有运算符都可以重载除以下:. :: ?: sizeof这些不能做运算符重载
运算符重载基本上出现在类中和结构中:
- 运算符重载要满足原来的规则
- 运算符理解为函数的一个表现
首先考虑返回值,只能返回一个新的变量只能用拷贝;
operator运算符 来代表函数名
参数列表:因为通过对象的成员函数来实现运算符重载,所以this算一个参,只能是第一个参
例:
CA operator+ (CA const& srcCA) const;//声明
CA ::CA operator+ (CA const& srcCA) const//定义
{
CA z;
z.a=this->a+srcCA.a;
return z;
}
CA x(1);
CA y(2);
x+y;//CA对象的+运算符的符号调用
CA n(x.operator+(y));//CA对象的+运算符的函数调用
自增长牵制写法
CA &operator++ ();//++前置声明
CA ::CA &operator++ ()
{
this->a++;
return *this;
}
自增长后置写法
CA operator++ (int);//定义++后置,int只是为了与前置做区分,
CA ::CA operator++(int)
{
CA z=*this;
this.a++;
return z;
}
C++输入输出的运算符重载
ostream输出流 istream输入流
因为第一个参数时输入输出流不是this类型所以类型不匹配,这个运算符重载不能写在类中
输出:
friend ostream &operator<<(ostream & os,CA const& srcCA);//声明
ostream &operator<<(ostream & os,CA const& srcCA)//定义
{
os<<strcCA.a;
return os;
}
输入:
friend istream &operator>>(istream &is,CA const& srcCA);//声明
istream &operator>>(istream & is, CA const& srcCA)//定义
{
is>>srcCA;
return is;
}
如果是一个指针需要输入,首先分配一个空间接受输入
- 分配一个空间来接受输入
- 分配空间两种方法1.给一个足够大的临时空间,用户输入完毕,把有效数据拷贝到自身的指针2.直接限定用户的输入个数