多态是指同样的消息被不同类型的对象接收导致不同的行为,消息是对类的成员函数的调用,不同的行为是指不同的实现
运算符重载:对已有的运算符赋予多重含义,使同一个运算符作用于不同类型的数据时导致不同的行为
函数类型 operator 运算符( 形参表 ) { 函数体 } 【 函数参数比原来操作数个数少一个 】
complex operator + ( complex c2 )
也可以 friend 函数类型 operator 运算符( 形参表 ) { 函数体 } 【 参数个数与原操作数个数相同 】
双目运算符
单目运算符
Clock& operator ++() 前置弹幕运算符
{
......; return *this;
}
Clock operator ++( int ) 后置单目运算符
{
Clock old = *this; ++(*this); return old;
}
虚函数
动态绑定的基础,必须是非静态的成员函数,经过派生后,在类族中就可以实现运行过程中的多态
虚函数声明只能出现在类声明中的函数原型声明中,而不能在成员函数实现的时候
运行中多态3个条件:满足类型兼容规则,声明虚函数,由成员函数来调用或者通过指针、引用来访问虚函数
virtual 函数类型 函数名 (形参表){
函数体
}
B0::display B1::display B2::display
基类构造函数调用虚函数时,不会调用派生类的虚函数;被析构时,对象也不是一个派生类对象了,只调用Base::virt()
需要声明 需析构函数,子类调用析构函数,防止内存泄漏
virtual ~类名()
纯虚函数
virtual 函数类型 函数名( 参数表 ) =0;
基类中不能给出函数的实现部分,函数体由派生类给出。
只说明函数原型用来规定整个类族的统一接口形式,而在派生类中再给出函数的具体实现
抽象类
为一个类族建立一个公共的接口,不能实例化,可以声明一个抽象类的指针和引用
带有纯虚函数的类