- 多态性:(一个借口多种方法)
- Cylinder cy1; cy1.area();
- Point &pRef = cy1; pRef.area(); // 调用Point类中的area()等价于cy1.Point::area();
- Circle &cRef = cy1; cRef.area(); // 调用Circle类中的area();
- pRef是cy1中基类Point部分的别名;cRef是cy1中基类Circle部分的别名
- 虚函数:使用基类指针调用同一类族中不同类的虚函数。
- 使用方法:
- (1) 在基类用virtual声明成员函数为虚函数
- (2) 在派生类中重新定义此函数,要求函数名,函数类型,函数个数和类型全部与基类的虚函数相同。(C++规定,当一个成员函数被声明为虚函数后,其派生类中的同名函数都自动成为虚函数。)
- (3) 定义一个指向基类对象的指针变量,并使它纸箱同意类族中的某一对象
- (4) 通过该指针变量调用此虚函数,次数调用的就是指针指向对象的同名函数
- 静态关联与动态关联
- 静态关联:函数重载和通过对象名调用的虚函数,在编译时即可确定其调用的虚函数属于哪一个类,其过程成为静态关联。
- 动态关联:在运行阶段,基类指针先指向某一个类对象,然后通过此指针变量调用该对象的函数;在运行阶段把虚函数和类对象"绑定"在一起,此过程成为动态关联。
- 虚析构函数(P407):virtual~Point() {cout << "executing Point destructor" << endl;} //先调用派生类的析构函数,再调用基类的析构函数。
- 纯虚函数:virtual 函数类型 函数名(参数表列) = 0;例如:
- virtual float area() const = 0;
- virtual float area() const {return 0;} // 虚函数
参考文章:
1. 虚函数,纯虚函数,虚基类