4.0 C++远征:纯虚函数与抽象类
3-1纯虚函数抽象类
一、纯虚函数
1.纯虚函数的定义
纯虚函数,没有函数体,同时定义时在函数名后要加上“=0”。
class Shape {
public:
virtual double calcArea() { // 虚函数
return 0.00;
}
virtual double calcPerimeter() = 0; // 纯虚函数
}
2.纯虚函数的实现原理
虚函数表指针指向一份虚函数表。
如果定义的是虚函数,在虚函数表中,此函数指针的值存的是虚函数的首地址。
如果定义的是纯虚函数,在虚函数表中,此函数指针的值存的是0。
二、抽象类
1.抽象类
含有纯虚函数的类叫做抽象类。
2.抽象类的用法
(1)抽象类无法实例化对象。(无论在堆中还是栈中。)
(2)因为纯虚函数无法被调用。
(3)当类的用途很明确时,才在派生类中具体去实现基类中定义的纯虚函数。这样在派生类中才能使用。
(4)若是派生类并没有对基类中的纯虚函数进行实现,则该派生类仍然是抽象基类。
(5)只有将抽象类中所有纯虚函数都做了实现,派生类才可以去实例化对象。
(6)抽象基类是本类族的公共接口。例如可通过抽象基类的指针访问到任何子类的虚函数,并对这些函数下达同一命令,从而实现多态性。