Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2095785
  • 博文数量: 229
  • 博客积分: 7217
  • 博客等级: 上校
  • 技术积分: 3224
  • 用 户 组: 普通用户
  • 注册时间: 2009-02-19 17:23
个人简介

个人主页https://xugaoxiang.com,微信公众号: Dev_Club 或者搜索 程序员Club

文章分类

全部博文(229)

文章存档

2017年(1)

2016年(20)

2015年(23)

2013年(1)

2012年(23)

2011年(68)

2010年(62)

2009年(31)

分类: LINUX

2011-06-17 22:28:49

虚函数必须是基类的非静态成员函数,其访问权限可以是protected或public,在基类的类定义中定义虚函数的一般形式:   
      virtual 函数返回值类型 虚函数名(形参表)  { 函数体 }

      class Parent
      {
      public:
          virtual void func_1() {cout<<"This is parent.";}
          void func_2 {cout<<"This is parent.";}
      };

      class Child
      {
      public:
         virtual void func_1 {cout<<"This is child.";}//这里可不写virtual关键字
         void func_2 {cout<<"This is child.";}
      };

      Parent *p = new Child;
      p->func_1();
      p->func_2();

      这里用父类的指针去指向一个子类的对象,p->func_1()会输出This is child。但是对于普通函数func_2(),就没有这种关系,因此p->func_2()还是输出This is parent,这就是 virtual 的作用。   

纯虚函数是一种特殊的虚函数,基类只定义了函数体,没有实现过程。它的一般格式如下:
   class <类名>  
      {
      virtual <类型><函数名>(<参数表>)=0;
  …  
    };

虚函数与纯虚函数区别

1、带纯虚函数的类称为虚基类,这种基类不能直接生成对象,而只有被继承并重写其虚函数后才能使用,这样的类叫抽象类。

2、虚函数本身有默认实现,它的作用是为了能让其在它的子类里可以被重载,以达到多态,而纯虚函数只是一个接口,仅仅是个函数声明,它必须在子类里实现。

3、虚函数在子类里也可以不重载,纯虚函数必须在子类里实现。

阅读(2704) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

djstava2011-06-21 22:00:41

sunsetknight: 有几点补充:
1、虚函数和纯虚函数可以是 private 的,有一个建议,为了将接口和多态分开,虚函数都应该是 private 的。STL库就遵循这个建议。
2、纯虚函数是可.....

sunsetknight2011-06-21 13:25:51

有几点补充:
1、虚函数和纯虚函数可以是 private 的,有一个建议,为了将接口和多态分开,虚函数都应该是 private 的。STL库就遵循这个建议。
2、纯虚函数是可以有默认实现的,区别在于有纯虚函数的类不能被实例化