您的位置:首页 > 编程语言 > C语言/C++

C++ 虚函数与纯虚函数

2014-11-13 13:14 246 查看
C++
虚函数与纯虚函数

分类: C++

c++classfloatc

纯虚函数定义如下: 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://blog.csdn.net/qinsong729/article/details/4483085
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: