C++ 虚函数与纯虚函数
2013-01-27 13:09
281 查看
纯虚函数定义如下: 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类仍然认为是一个纯抽象类,因为它仍然包含一个纯虚函数。
总结: 纯虚函数充当实现策略,它的任何用户在使用前必须实现纯虚函数。所以抽象类提供了规范。
类的一个成员定位虚函数的实际意义在于让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类仍然认为是一个纯抽象类,因为它仍然包含一个纯虚函数。
总结: 纯虚函数充当实现策略,它的任何用户在使用前必须实现纯虚函数。所以抽象类提供了规范。
相关文章推荐
- C++ 虚函数、纯虚函数的区别
- c++中的 虚函数 纯虚函数 虚基类
- C++虚函数和纯虚函数的作用与区别
- C++的虚基类,抽象类,虚函数,纯虚函数,virtual
- C++::关于虚函数,纯虚函数
- c++中抽象类、虚函数和纯虚函数的学习以及和Java的对比
- C++ 虚函数与纯虚函数的区别
- C++ 虚函数、纯虚函数笔记
- C++的虚基类,抽象类,虚函数,纯虚函数,virtual
- C++ - 虚基类、虚函数与纯虚函数
- C++ 虚函数和纯虚函数的区别
- C++虚继承、虚基类、虚函数与纯虚函数的概念和引用
- C++与C#中的虚函数、纯虚函数、抽象类的对比
- C++的虚基类,抽象类,虚函数,纯虚函数,virtual
- C++虚函数与纯虚函数用法与区别
- 【C/C++】理解虚基类、虚函数与纯虚函数的概念
- C++、JAVA与C#中的多态虚函数、纯虚函数(抽象函数)
- 一个例子彻底搞懂c++虚函数和纯虚函数
- C++ 虚函数、纯虚函数、继承、虚表、多态原理相关知识点总结
- C++ 虚函数和纯虚函数的区别