重载为类的成员函数

来源:百度知道 编辑:UC知道 时间:2024/06/12 11:45:19
#include <iostream.h>

class complex
{
public:
complex() { real=imag=0; }
complex(double r, double i)
{
real = r, imag = i;
}
complex operator +(const complex &c);
complex operator -(const complex &c);
complex operator *(const complex &c);
complex operator /(const complex &c);
friend void print(const complex &c);
private:
double real, imag;
};

inline complex complex::operator +(const complex &c)
{
return complex(real + c.real, imag + c.imag);
}

inline complex complex::operator -(const complex &c)
{
return complex(real - c.real, imag - c.imag);
}

inline complex complex::operator *(const complex &c)
{
return complex(real * c.real - imag * c.imag, real * c.imag + imag * c.real);
}

inline complex complex::operator /(const complex &c)
{
return complex((real * c.real + imag + c.imag) / (c.real * c.real + c.imag

重载是可使函数、运算符等处理不同类型数据或接受不同个数的参数的一种方法.
在重载及函数模板重载里,编译器选择函数,要经过以下三步,这个过程称为重载解析。
第一步:创建候选函数列表,其中包含有与被调函数名称相同的函数与模板函数。
第二步:使用候选函数列表创建可行函数列表。这些都是参数数目正确的函数。
第三步:确定是否有最佳可行的函数。如果有,则使用。

运算符重载的目的:要使程序员自己定义的类所实例的对象,能像int,char等基础类型进行加减乘除、赋值、输入输出等运算。原则:用成员函数重载一元及与赋值有关的运算符,其中“=、()、[]、->、->*”必须用成员函数重载;用全局函数重载与赋值无关且不是必须用成员函数重载的二元运算符。
例如:
class Fraction
{
friend istream& operator>>(istream&,Fraction&);//全局函数重载>>
friend ostream& operator<<(ostream&,const Fraction&);//全局函数重载<<
friend Fraction operator!(const Fraction&);//全局函数重载一元运算符
//全局函数重载二元运算符
friend Fraction operator+(const Fraction&,const Fraction&);
friend Fraction& operator++(Fraction&);//全局函数重载前缀++运算符
friend Fraction operator++(Fraction&,int);//全局函数重载后缀++运算符
public:
Fraction(int=0,int=1);//默认构造函数
Fraction(double);//根据double构造Fraction
void set(int,int);
Fraction operator-()const;//成员函数重载一元运算符
Fra