C++中纯虚函数和虚函数的区别

首先:强调一个概念  
定义一个函数为虚函数,不代表该函数为不被实现的函数  
       定义他为虚函数是为了允许用基类的指针来调用子类的这个函数  
定义一个函数为纯虚函数,才代表函数没有被实现  
       定义他是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。  
 
纯虚函数就是父类不给定义,子类必须要实现这个函数,不然子类不能被具象化

虚函数的话父类也要给定义,因为子类可以不实现这个虚函数而沿用父类的虚函数

)
对继承的影响:  
       普通的类(没有虚函数,纯虚函数)就可以被继承,而且工作的相当好  
 *****************************************************************************************************************************************
关于实例化一个类:  
有纯虚函数的类是不可能生成类对象的,如果没有纯虚函数则可以。比如:  
class  CA  
{  
public:  
       virtual  void  fun()  =  0;    //  说明fun函数为纯虚函数  
       virtual  void  fun1();  
};  
 
class  CB  
{  
public:  
     virtual  void  fun();  
     virtual  void  fun1();  
};  
 
//  CA,CB类的实现  
...  
 
void  main()  
{  
       CA  a;      //  不允许,因为类CA中有纯虚函数  
       CB  b;      //  可以,因为类CB中没有纯虚函数  
       ...  
}  
**************************************************************************************
(以下都是我自己的总结)
对“虚函数是为了允许用基类的指针来调用子类”这句话的理解:
设Parent是父类,Child是子类
Parent parent;
Child Child;
父类中有function1和function2这两个函数,
并且function2是虚函数。
当我们在程序中,使用
 Parent *p;  // 定义一个基类指针
p=&child;         // 指向继承类对象  ~~~或者用 p=new Child()这样的形式,
这里就是用基类的指针(p)来调用子类,(因为把子类的对象赋给了它)
如果基类的函数中没有virtual的话,就算是把子类的对象赋值给了父类指针,由于静态联编,指针p永远都只调用父类的方法
但是,若父类的某个方法用virtual修饰了,变成了虚函数,那么,这时virtual就起作用了,这个p 将会调用Child类的function2,而不是父类的function2~~
若Parent类还有一个子类,叫Child2
当执行
Parent *p;
p=new Child2();
时,就能体现出virtual的功劳了,动态联编会选择执行Child2这个类的function2函数,而不是基类的function2函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值