当前位置:编程学习 > C/C++ >>

C++ 虚函数与纯虚函数

今天讲讲C++中,虚函数与纯虚函数的用法和区别。
 
 
虚函数的提出在我上一篇关于C++的文章中已经提过,是为了解决多继承的二义性而提出的,今天不再赘述;
 
而纯虚函数是一种特殊的函数,它的作用是在基类中不给出有意义的实现,而把说明成纯虚函数,它的实现留给该基类的派生类去做。包含纯虚函数的类就是抽象类,抽象类不能被实例化,但是可以定义指向抽象类数据的指针变量,当派生类称为具体类后,就可以用这种指针指向派生类的对象,然后通过该指针调用虚函数,实现多态操作。
 
虚函数和纯虚函数的书写格式类似于下面:
 
 
 
 
[cpp] 
class Student  
  
{  
  
    virtual char * test();     //虚函数   
  
    virtual char * Category() =0;  //纯虚函数   
  
};  
 
  class Student
 
  {
 
      virtual char * test();     //虚函数
 
      virtual char * Category() =0;  //纯虚函数
 
  };
 
虚函数可以被直接调用,也可以备子类重载以后以多态的形式调用,而纯虚函数必须在子类中实现该函数才可以使用,因为纯虚函数在基类只有声明而没有定义。
 
虚函数和纯虚函数的定义中不能有static 标识符,原因很简单,被static修饰的函数在编译时候要求前期绑定,然而虚函数确实动态绑定,而且被两者修饰的函数生命周期也不一样。
 
如果一个类中含有纯虚函数,那么任何试图对该类进行实例化的语句都将导致错误的产生,因为抽象基类不能被直接调用,必须呗子类集成重载以后,根据要求调用其子类的方法。
 
 
 
 
[cpp]  
class StudentA  
   {  
public:  
    virtual void funOne() = 0;  // 说明fun函数为纯虚函数   
    virtual void funTwo();  
};  
  
class StudentB  
{  
public:  
   virtual void funOne();  
   virtual void funTwo();  
};  
  
// CA,CB类的实现   
...  
  
void main()  
{  
    StudentA xiaoliu;   // 不允许,因为类CA中有纯虚函数   
    StudentB xiaoxin;   // 可以,因为类CB中没有纯虚函数   
    ...  
}  
 
class StudentA
   {
public:
    virtual void funOne() = 0;  // 说明fun函数为纯虚函数
    virtual void funTwo();
};
 
class StudentB
{
public:
   virtual void funOne();
   virtual void funTwo();
};
 
// CA,CB类的实现
...
 
void main()
{
    StudentA xiaoliu;   // 不允许,因为类CA中有纯虚函数
    StudentB xiaoxin;   // 可以,因为类CB中没有纯虚函数
    ...
}
 
 
补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,