多态性与重载
-
多态性是面向对象程序设计的重要特性之一。多态是会一个名字有很多种语义,或一个相同界面有很多多种实现;或是指发出同样的消息被不同类型的对象接收而导致完全不同的行为,即对象根据所接收到的消息做出相应的操作。
-
消息主要是指对象成员函数的调用,不同的行为指不同的实现。
多态的实现:
- 函数重载
- 运算符重载
- 虚函数
函数重载
- 多态性的一种形式,它是指允许在相同的作用域内,相同的函数名对应着不同得实现。
- 函数重载的条件是要求函数参数的类型或个数有所不同。
- 成员函数重载有三种方式:
-
在一个类中重载:参数的特征区分;例如:
show(int, char); show(char*, float); -
在不同类中重载:实用类作用域符::加以区分(不同类中重载,静态成员函数),例如:
Circle::show(); Point::show(); -
根据类对象加以区分(不同类中重载,不同成员函数),例如:
acircle.show() 调用 Circle::show()
apoint.show() 调用 Point::show() -
基类的成员函数在派生类中重载:继承时再介绍。
通过成员函数实现2个复数对象的加法运算
#include <iostream>
using namespace std;
class complex//复数类声明
{
public:
complex(double r=0.0,double i=0.0) //构造函数
{ real=r; imag=i;}void Show( ); //显示复数的值
complex add(complex &c);//复数与复数相加的函数
private:
double real;
double imag;
};
complex complex::add(complex &c2) //通过成员函数实现
{
complex t;
t.real=real+c2.real;
t.imag=imag+c2.imag;
return t;
}
void complex::Show()
{
cout<<"("<<real<<","<<imag<<")"<<endl;
}
int main() //主函数
{
complex z1(1.5,2.8),z2(-2.3,3.4),z3; //声明复数类的对象
z3=z1.add(z2);//成员函数调用
cout<<"z3=";
z3.Show();
return 0;
}
通过友元函数实现2个复数对象的加减运算
#include <iostream>
using namespace std;
class complex //复数类声明
{
public: //外部接口
complex(double r=0.0,double i=0.0)
{real=r;imag=i;}//构造函数
friend complex add(complex &c1,complex &c2); //add2个复数友元函数
void Show(); //输出复数
private: //私有数据成员
double real; //复数实部
double imag; //复数虚部
};
complex add(complex &c1,complex &c2) //通过友元函数实现
{ complex t;
t.real=c1.real+c2.real;
t.imag=c1.imag+c2.imag;
return t;
}
void complex::Show()
{ cout<<"("<<real<