说重点:纯虚函数和抽象类的相关内容

基类往往用于一些抽象的概念。就是说仅说明一个公共界面,而有派生类提供各自的实现版本。在这种情况下,基类的有些函数没有定义是很正常的,但要求派生类必须重新定义这些虚函数,以使派生类有意义。为此,C++i引用了纯虚函数的概念。

一个具备纯虚函数的基类称为抽象类。抽象类机制支持一般概念的表示,也用于定义接口。

纯虚函数

纯虚函数是基类说明的虚函数,他在该基类之中没有实现定义,要求所以派生类都必须定义自己的版本。纯虚函数的说明形式如下:virtual 类型 函数名(参数表)=0;赋值为0,是表示没有实现定义。虚函数的实现在他的派生类中定义。

以下举个简单的例子

//figure
#include
using namespace std;
class Figure
{
	protected:
		doubut x,y;
	public:
		void set_dim(double i,double j=0)
		{
			x=i;
			y=j;
		}
		virtual void show_area()const=0;
};
class Tringle:public Figure
{
	public:
		void show_area()const
		{
			cout<<"Triangke with hight"<

Triangke with hight 10 and base 5 has an area of 25

Square with dimension 10*5 has an area of 50

Circle with redius  9 has an area of 254.34

我们可以看到在基类之中定义了纯虚函数(virtual void show_area()const=0;),纯虚函数没有在基类之中实现定义。还有,显而易见,通过基类Figure派生出的三个派生类之中对 void show_area()const=0进行了各自的定义。main函数通过不同对象的调用派生show_area()

函数的不同实现版本。

抽象类

抽象类至chun纯虚函数,记住,是至少,就是绝对有纯虚函数。像上面例子中的Figure就有一个纯虚函数,它就是一个抽象类。定义了纯虚函数的派生类叫具体类,具体类,具体,具体说明纯虚函数的作用,对纯虚函数进行定义。

我们知道一个不论什么东西,它都会受到限制。没有什么东西是不受限制的。那么纯虚函数也受到c++的限制。

1 抽象类只能做其他类的基类 2 抽象类不能建立对象 3抽象类不能做参数类型,函数返回类型或显示类型转化。但是,可以说明抽象类的指针和引用。

感觉这么理解有点困难,别慌,来,咋举个例子看看。

对Figure抽象类的使用

Figure x ;//错误 抽象类不能建立对象

Figure *p;//可以说明抽象类的指针

Figure f()//错误 抽象类不能作为返回类型

void g(Figure);//错误 抽象类不能作为参数类型

Figure &h(Figure &);//正确,可以说明抽象类的引用

抽象类的指针和抽象类的引用是一个重点。我们先来讲抽象类的指针。

我们直接以上面的代码进行改动

#include"figure.h"
int main()
{   
	Figure *p;//纯虚函数的指针
	Triangle t;
	Square s;
	Circle c;
	p=&t;//调用地址
	p->set_dim(10.0,5.0);//指向
	p->show_area();
	p=&s;
	p->set_dim(10.0,5.0);
	p->show_area();
	p=&c;
	p->set_dim(9.0);
	p->show_area();
 } 

这么一看其实用纯虚函数的指针也挺简单的

接下来就是用抽象类引用的使用了

#include
using namespace std;
class Number 
{
	public:
	Number(int i)
	{
		val=i;
	}
	virtual void show()const=0;//纯虚函数
	protected:
	int val;
};
class Hex:public Number
{
	public:
	Hex(int i):Number(i){ }
    void show()const//别忘记后面的const
	{cout<<"Hex="<说重点:纯虚函数和抽象类的相关内容_第1张图片

 

你可能感兴趣的:(虚函数,c++,C++基础,c++,继承,指针,虚数)