博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
纯虚函数
阅读量:2382 次
发布时间:2019-05-10

本文共 1494 字,大约阅读时间需要 4 分钟。

纯虚函数定义如下: virtual functionname (parameter ) =0 ;

类的一个成员定位虚函数的实际意义在于让C++知道该函数并无意义,它的作用只是为了让派生类进行函数重载保留位置。纯虚函数的定义方法就是在类的虚函数后面加上 “ =0 ” 标记,类中一旦出现了纯虚函数的定义,那么此类为抽象类。

实例 1.

#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;

//抽象类定义

class abstractcls
{
   public:
     abstractcls (float speed, int total) //构造函数
     {
            abstractcls::speed=speed;
            abstractcls::total=total;
       }
     virtual void showmember()=0;    //纯虚函数的定义
   protected:
      float speed;
      int total;
};

class car public : abstractcls     //抽象类派生类

{
   public:
      //派生类的构造函数,实现基类的构造函数
      car(int aird, float speed, int total):abstractcls(speed,total)
      {
         car::aird=aird;
       }
   virtual void showmember() //派生类函数重载
   {
      cout<<speed<<"1"<<total<<"2"<<endl;
   }
protected:
   int aird;
};

调用如下:

  
int main(void)
{
car b(250,150,4);
     b.showmember();
return 0;
}

总结,什么情况下需要使用纯虚函数:

1,当想要在基类中抽象出一个方法,且该类被继承类而不能被实例化时。
2,基类的方法必须在派生类中被实现时。
3,多个对象具有公共的抽象属性,但却有不同的实现要求时。

实例2. 类A有两个纯虚成员函数 Lock(),unLock() 和一个虚析构函数

class A {

    public:
      virtual void Lock(void)=0;
      virtual void unLock(void)=0;
      virtual ~A(void);
};

        类A实际上并没有实现这些函数,只是声明了他们。因为具有纯虚函数任何类不能用于创建运行时的对象,为了使用这个类,用户必须从这个抽象类派生出一个派生类来。而且为抽象类声明的每一个纯虚函数提供函数的定义与实现。

B类从A类派生,并提供了2个纯虚函数的定义。

class B :public A

{
public:
    B(void);
    ~B(void);
    virtual void Lock(void) {pthread_mutex_lock(x);}
    virtual void unLock(void) {pthread_mutext_unlock(x);}
protectd:
     pthread _mutex_t x;
};

       B类通过POSIX 函数 pthread_mutext_lock() 和 pthread_mutext_unlock() 已经实现了两个纯虚函数。如果B只实现了其中的一个纯虚函数,那么B类仍然认为是一个纯抽象类,因为它仍然包含一个纯虚函数。

总结: 纯虚函数充当实现策略,它的任何用户在使用前必须实现纯虚函数。所以抽象类提供了规范。

转载地址:http://iiuab.baihongyu.com/

你可能感兴趣的文章
简介分布式计算系统的硬件架构
查看>>
图形图像显示研究(二)
查看>>
延庆石京龙滑雪记
查看>>
有关博客的一些断想
查看>>
Windows Server2008上安装VS2008出错及解决办法
查看>>
自定义安装MS Office Project2007会出错
查看>>
有关无法打开预编译头文件错误的思考
查看>>
在对话框上创建视图的方法总结
查看>>
关于桌面软件的开发语言和开发框架的思考
查看>>
打开word2010每次都要配置进度的解决办法
查看>>
使用动态数组结构的一个好处
查看>>
移动铁通宽带上网设置教程
查看>>
怎样的提问才是有效的提问
查看>>
山城之旅
查看>>
有关在对话框上创建视图上的再探索
查看>>
读史可以明智
查看>>
VC常用代码之创建进程
查看>>
如何保住一个人一生的劳动果实
查看>>
并行处理系统测试正式启动
查看>>
bcg库使用心得两则
查看>>