1.4.3 纯虚函数与抽象类
如下声明表示一个函数为纯虚函数:
- class A
- {
- public:
- virtual void Print() = 0;
- };
一个函数声明为纯虚函数后,它的意思是--我是一个抽象类!不要把我实例化!
纯虚函数用来规范派生类的行为,实际上就是所谓的"接口"。它告诉使用者:我的派生类都会有这个函数。
声明了纯虚函数的类,称为抽象类。
在使用纯虚函数时,应注意以下几个方面的问题:
抽象类中可以有多个纯虚函数。
不能声明抽象类的对象,但可以声明指向抽象类的指针变量和引用变量。
抽象类也可以定义其他非纯虚函数。
如果派生类中没有重新定义基类中的纯虚函数,则在派生类中必须再将该虚函数声明为纯虚函数。
从抽象类可以派生出具体类或抽象类,但不能从具体类派生出抽象类。
在一个复杂的类继承结构中,越上层的类抽象程度越高,有时甚至无法给出某些成员函数的实现,显然,抽象类是一种特殊的类,一般处于类继承结构的较外层。
引入抽象类的目的主要是为了能将相关类组织在一个类继承结构中,并通过抽象类来为这些相关类提供统一的操作接口。
【例1.11】设计一个抽象类Shape,它表示具有形状的东西,体现抽象的概念,在它下面可以派生出多种具体形状,比如三角形、矩形(Ex1_11)。
代码如下:
- #include <iostream.h>
- class Shape
- {
- protected:
- double x, y;
- public:
- void set(double i, double j)
- { x=i; y=j; }
- virtual void area() = 0;
- };
-
- class Triangle : public Shape
- {
- public:
- void area()
- { cout<< "三角形面积: " <<0.5*x*y<<endl; }
- };
-
- class Rectangle : public Shape
- {
- public:
- void area()
- { cout<<"矩形面积:" <<x*y<<endl; }
- };
- void main()
- {
- Shape *p;
- Triangle t;
- Rectangle r;
- p = &t;
- p->set(7, 8);
- p->area();
- p = &r;
- p->set(7, 8);
- p->area();
- }
运行结果为:
- 三角形面积:28
- 矩形面积:56
【责任编辑:
云霞 TEL:(010)68476606】