多态性与虚函数
面向对象理论中的3个术语:对象、方法和消息。对象(object):不言而喻,它是构成系统的基本单位,有属性和行为两个要素,在C++中,每个对象都是由数据和函数这两部分组成的,数据即是对象的属性,行为称之为方法(method),方法是对数据的操作,通常由函数实现。调用对象中的函数就是向该对象传送一个消息(message),所谓“消息”,其实就是一个命令。例如:
stud.display();
就是向对象stud发出的一个“消息”,通知它执行其中的display“方法”(即display函数)。即:stud是对象,display()是方法,语句“stud.display();”是消息。
1.多态性(polymorphism)
多态性定义:由继承而产生的相关的不同的类,向其对象发送同一个消息,不同的对象接收到后会产生不同的行为(即方法)。
多态性分为两类:静态多态性和动态多态性。函数重载和运算符重载实现的多态性属于静态多态性,在程序编译时系统就能决定调用的是哪个函数,因此静态多态性有称为编译时的多态性。静态多态性是通过函数的重载实现的(运算符重载实质上也是函数重载)。动态多态性是在程序运行过程中才动态地确定操作所针对的对象,故称之为运行时的多态性。动态多态性是通过虚函数实现的。
关于静态多态性和动态多态性,请看下面的例子:
定义3个类:点、圆和圆柱
- #include <iostream.h>
- //定义Point基类
- class Point
- {
- public:
- Point(float=0, float=0);
- void display();
- friend ostream & operator <<(ostream &, const Point &);
- protected:
- float x, y;
- };
- Point::Point(float a, float b)
- {
- x=a; y=b;
- }
- ostream & operator <<(ostream &output, const Point &p)
- {
- output<<"["<<p.x<<","<<p.y<<"]"<<endl;
- return output;
- }
- void Point::display()
- {
- cout<<"["<<x<<","<<y<<"]"<<endl;
- }
- //定义Circle基类
- class Circle: public Point
- {
- public:
- Circle(float=0, float=0, float=0);
- float area ( )