C++面向对象编程
运算复重载“: 是一运算符可以完成不同的运算功能
要注意几点:
1)不能改变运算符的优先级
2) 不能该百年运算符的结合性
3) 不能创造新的运算符
4) 不能改变操作符的操作数的个数
1、运算符重载函数作为类的成员函数
基本格式
函数类型 operator 重载运算(形参表)
{
函数体;
}
2、运算符重载函数作为类的友元函数
基本格式:
friend 函数类型 operator 重载运算符(形参表)
{
函数体;
}
下面看代码:
程序功能实现复数的加减功能
#include<iostream>
using namespace std;
class Complex
{//利用重载运算符进行运算
//新建一个计算复数类函数
float a;
float b;
public :
Complex(){}
Complex(float a1, float b1):a(a1), b(b1){} //常数据成员赋值
friend Complex operator+(Complex &, Complex &);
friend Complex operator -(Complex &, Complex &);
void disp()
{//:: 作用域运算符号, 该运算符左边是一个类名不是一个表达式
cout<<a;
if(b > 0) cout<<" + ";
cout<<b<<"i"<<endl;
}
};
Complex::Complex operator +(Complex &c, Complex &d)
{//这个情况是第一种格式重载运算符函数
Complex tmp ;
tmp.a = d.a + c.a;
tmp.b = d.b + c.b;
return tmp;
}
//下面是元素符友元函数操作
Complex operator -(Complex &c, Complex &d)
{
Complex tmp ;
tmp.a = c.a - d.a;
tmp.b = c.b - d.b;
return tmp;
}
int main()
{
Complex s1(1, 3) , s2(3, 4), s3, s4;
s3 = s1 + s2 ;
s4 = s2 - s1;
cout<<"s1 + s2 = ";
s3.disp();
cout<<"s2 - s1 = ";
s4.disp();
return 0;
}
重载单目运算符
格式 :
函数类型 operator ++() ++A //前缀运算
函数类型 operator ++(int) A++ //后缀运算
看代码:
#include<iostream>
using namespace std;
class myclass
{
int n ;
public :
myclass(int i){ n = i;}
myclass operator ++(){ n += 3;} // 前缀运算符号
myclass operator ++(int){n*= 3;} //后最运算符
void disp()
{
cout<<" n = "<<n<<endl;
}
};
int main()
{
myclass s1(1), s2(2);
s1++ ; //后缀运算符
s1.disp();
++s2;
s2.disp();
return 0;
}