纯虚函数
纯虚函数是一种特殊的虚函数,在许多情况下,在基类中不能对虚函数给出有意义的实现,而把它声明为纯虚函数,它的实现留给该基类的派生类去做。这就是纯虚函数的作用。纯虚函数的存在是为了更方便使用多态特性。它的一般格式如下:
class <类名>
{
virtual <类型><函数名>(<参数表>)=0;
…
};
在成员函数的形参列表后面写上=0, 则成员函数为纯虚函数。纯虚函数可以让类先具有一个操作名称,而没有操作内容,让派生类在继承时再去具体地给出定义。凡是含有纯虚函数的类叫做抽象类。这种类不能声明对象,只是作为基类为派生类服务。除非在派生类中完全实现基类中所有的的纯虚函数,否则,派生类也变成了抽象类,不能实例化对象。包含纯虚函数的类叫做抽象类( 也叫接口类) , 抽象类不能实例化出对象。 纯虚函数在派生类中重新定义以后, 派生类才能实例化出对 象。
1 class A {
2 public:
3 A();
4 virtual ~A();
5 void f1();
6 virtual void f2(); 7 virtual void f3()=0; 8 }; 9 class B:public A{ 10 public: 11 B(); 12 virtual ~B(); 13 void f1(); 14 virtual void f2(); 15 virtual void f3(); 16 }; 17 int main(int argc,char * argv[]) { 18 A *m_j = new B(); 19 m_j -> f1(); 20 m_j -> f2(); 21 m_j -> f3(); 22 delete m_j; 23 return 0; 24 }
f1()是一个隐藏,调用m_j->f1();会去调用A类中的f1(),它是在我们写好代码的时候就会定好的。也就是根据它是由A类定义的,这样就调用这个类的函数。f2()是重写(覆盖)调用m_j->f2();会调用m_j中到底保存的对象中,对应的这个函数。这是由于new的B对象(调用派生类的f2())f3()与f2()一样,只是在基类中不需要写函数实现。
1 class Person
2 {
3 vi rtual voi d Di splay () = 0; // 纯虚函数
4 protected :
5 stri ng _name ; // 姓名
6 } ;
7 class Student : publi c Person
8 { } ;