C++运算符的重载
程序员文章站
2024-03-17 21:34:22
...
运算符的重载可以提高程序运行的效率
通过成员函数的重载
#include<iostream>
using namespace std;
class Complex //定义Complex类
{
public:
Complex(){real=0;imag=0;} //定义构造函数
Complex(double r,double i){real=r;imag=i;} //构造函数重载
Complex complex_add(Complex &c2); //声明负数相加函数
void display(); //使命输出函数
private:
double real; //实部
double imag; //虚部
};
Complex Complex::complex_add(Complex &c2) //定义复数相加
{
Complex c;
c.real=real+c2.real;
c.imag=imag+c2.imag;
return c;
}
void Complex::display() //定义输出函数
{cout<<"("<<real<<","<<imag<<"i)"<<endl;}
int main()
{
Complex c1(3,4),c2(5,-10),c3; //定义3个复数对象
c3=c1.complex_add(c2); //调用复数相加函数
cout<<"c1=";c1.display(); //输出c1的值
cout<<"c2=";c2.display(); //输出c2的值
cout<<"c1+c2=";c3.display(); //输出c3的值
return 0;
}
运行结果
注意:成员函数重载不能调用私有部分,只能通过公有函数实现
用operator函数对运算符重载
#include<iostream>
using namespace std;
class Complex //定义Complex类
{
public:
Complex(){real=0;imag=0;} //定义构造函数
Complex(double r,double i){real=r;imag=i;}
Complex operator+(Complex &c2); //声明重载运算+的函数
void display(); //使命输出函数
private:
double real; //实部
double imag; //虚部
};
Complex Complex::operator+(Complex &c2) //定义重载运算符+的函数
{
Complex c;
c.real=real+c2.real;
c.imag=imag+c2.imag;
return c;
}
void Complex::display() //定义输出函数
{cout<<"("<<real<<","<<imag<<"i)"<<endl;}
int main()
{
Complex c1(3,4),c2(5,-10),c3; //定义3个复数对象
c3=c1+c2;
cout<<"c1=";c1.display(); //输出c1的值
cout<<"c2=";c2.display(); //输出c2的值
cout<<"c1+c2=";c3.display(); //输出c3的值
return 0;
}
运行结果
友元函数运算符的重载
#include<iostream>
using namespace std;
class Complex //定义Complex类
{
public:
Complex(){real=0;imag=0;} //定义构造函数
Complex(double r,double i){real=r;imag=i;} //构造函数重载
friend Complex operator+(Complex &c1,Complex &c2); //重载函数作为友函数
void display(); //使命输出函数
private:
double real; //实部
double imag; //虚部
};
Complex operator+(Complex &c1,Complex &c2)
{return Complex(c1.real+c2.real,c1.imag+c2.imag);}
void Complex::display() //定义输出函数
{cout<<"("<<real<<","<<imag<<"i)"<<endl;}
int main()
{
Complex c1(116,4),c2(5,-10),c3; //定义3个复数对象
c3=c1+c2;
cout<<"c1=";c1.display(); //输出c1的值
cout<<"c2=";c2.display(); //输出c2的值
cout<<"c1+c2=";c3.display(); //输出c3的值
return 0;
}
注意:将双目运算符重载为友元函数时,由于友元函数不是该类的成员函数,因此再函数的形参表列中必需有两个参数,不能省略。