一、多态性
- 多态性是指同样的消息被不同类型的对象接收时导致的不同的行为。
- 消息就是对类的成员函数的调用。
- 不同的行为是指不同的实现,也就是调用了不同的函数。
- 多态的实现:函数重载(&、const也可以构成重载函数)、运算符重载、虚函数。
二、运算符重载
- 可以重载C++中除了下列运算符外的所有运算符: . 、 .* 、 :: 、 ?:
- 只能重载C++语言中已有的运算符,不可以臆造新的。
- 不可以改变原运算符的优先级和结合性。
- 不能改变操作数个数
- 经重载的运算符,其操作数中至少应该有一个是自定义类型。
两种形式:
1、重载为类成员函数。
2、重载为友元函数。
-
声明形式
函数类型 operator 运算符(形参)
{
…
} -
重载为类成员函数时
参数个数=原操作数个数-1 (后置++、- -除外) -
重载为友元函数时
参数个数=原操作数个数,且至少应该有一个自定义类型的形参。
-双目运算符 +
如果要重载 + 为类成员函数,使之能够实现表达式 oprd1 + oprd2,其中 oprd1 为A 类对象,则 + 应被重载为 A 类的成员函数,形参类型应该是 oprd2 所属的类型。
经重载后,表达式 oprd1 + oprd2 相当于 oprd1.operator +(oprd2)
#include<iostream>
using namespace std;
class complex //复数类声明
{
public: //外部接口
complex(double r=0.0,double i=0.0){
real=r;imag=i;} //构造函数
complex operator + (complex c2); //+重载为成员函数
complex operator - (complex c2); //-重载为成员函数
void display(); //输出复数
private: //私有数据成员
double real; //复数实部
double imag; //复数虚部
};
complex complex::operator +(complex c2) //重载函数实现
{
complex temp;
temp.real=c2.real+real;
temp.imag=c2.imag+imag;
return complex(temp.real, temp.imag);
}
complex complex::operator -(complex c2) //重载函数实现
{
complex c;
c.real=real-c2.real;
c.imag=imag-c2.imag;
return complex(c.real,c.imag);
}
void complex::display()
{
cout<<"("<<real<<","<<imag<<")"<<endl; }
void main() //主函数
{
complex c1(5,